Một số RDBMS cung cấp một LPAD()
và RPAD()
chức năng cho phép chúng ta gõ phím trái hoặc phím phải một chuỗi. Một số hàm cũng cho phép chúng tôi thêm các số không ở đầu hoặc ở cuối.
Dưới đây là các ví dụ về việc áp dụng đệm SQL trong một số RDBMS phổ biến hơn.
Oracle
Oracle cung cấp cho chúng tôi LPAD()
và RPAD()
đặc biệt để đệm phần bên trái hoặc bên phải của chuỗi:
SELECT LPAD('Cat', 20)
FROM DUAL;
Kết quả:
LPAD('CAT',20) _______________________ Cat
Trong trường hợp này, tôi đã sử dụng LPAD()
để áp dụng phần đệm bên trái và chuỗi kết quả là 20 ký tự, vì đó là những gì tôi đã sử dụng cho đối số thứ hai.
Kết quả được đệm bởi một khoảng trắng, vì đó là ký tự mặc định được sử dụng để đệm. Nếu bạn không chỉ định ký tự nào để chèn chuỗi, thì một khoảng trắng sẽ được sử dụng.
Bạn có thể thêm ký tự thứ ba để chỉ định ký tự nào sẽ sử dụng cho phần đệm:
SELECT LPAD('7', 3, '0')
FROM DUAL;
Kết quả:
LPAD('7',3,'0') __________________ 007
Trong trường hợp này, tôi đã chèn một số bằng các số không (mặc dù, kết quả là một chuỗi).
Oracle cũng có TO_CHAR(number)
hàm có thể được sử dụng để thêm các số không ở đầu một số:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;
Kết quả:
007
0
phần tử định dạng đại diện cho mỗi chữ số trong số ban đầu và bằng 0 nếu không có chữ số nào tồn tại ở vị trí đó trong số ban đầu.
PostgreSQL
PostgreSQL cũng có LPAD()
của riêng nó và RPAD()
chức năng:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Kết quả:
Left Padding | Right Padding | Both --------------+---------------+------- 007 | 700 | 00700
Và nó cũng có TO_CHAR()
của riêng nó hàm hoạt động giống như hàm cùng tên của Oracle:
SELECT TO_CHAR(7, 'fm000');
Kết quả:
007
MariaDB
MariaDB có LPAD()
của riêng nó và RPAD()
chức năng:
SELECT
LPAD('7', 3, '0') AS "Left Padding",
RPAD('7', 3, '0') AS "Right Padding",
LPAD(RPAD('7', 3, '0'), 5, '0') AS "Both";
Kết quả:
+--------------+---------------+-------+ | Left Padding | Right Padding | Both | +--------------+---------------+-------+ | 007 | 700 | 00700 | +--------------+---------------+-------+
Và trong khi MariaDB có TO_CHAR()
của riêng nó , nó không hoạt động trên các con số (nó bị giới hạn ở các giá trị ngày giờ).
MySQL
MySQL cũng có LPAD()
của riêng nó và RPAD()
các chức năng.
Đây là một ví dụ về việc sử dụng LPAD()
chống lại cột cơ sở dữ liệu:
SELECT Genre, LPAD(Genre, 10, '.')
FROM Genres;
Kết quả:
+---------+----------------------+ | Genre | LPAD(Genre, 10, '.') | +---------+----------------------+ | Rock | ......Rock | | Jazz | ......Jazz | | Country | ...Country | | Pop | .......Pop | | Blues | .....Blues | | Hip Hop | ...Hip Hop | | Rap | .......Rap | | Punk | ......Punk | +---------+----------------------+
Máy chủ SQL
SQL Server có một chút bất thường ở chỗ nó không có LPAD()
hoặc RPAD()
chức năng.
Tuy nhiên, SQL Server không có FORMAT()
chức năng cho phép chúng tôi dễ dàng đệm số bằng các số 0 ở đầu:
SELECT FORMAT(7, '000');
Kết quả:
007
Đối số thứ hai là một chuỗi định dạng số tùy chỉnh xác định số lượng ký tự mà chuỗi kết quả sẽ có. Thực tế là tôi đã sử dụng các số không có nghĩa là kết quả sẽ có các số 0 ở đầu nếu cần.
Để đệm các chuỗi trong SQL Server, chúng ta có thể làm như sau:
SELECT RIGHT('.......' + 'Cat', 7);
Kết quả:
....Cat
Có nhiều kỹ thuật khác nhau mà chúng tôi có thể sử dụng để áp dụng đệm trong SQL Server.