Trong SQL, RPAD()
được sử dụng để đệm phần bên phải của một chuỗi với một ký tự được chỉ định. Hàm có thể được sử dụng trên chuỗi và số, mặc dù tùy thuộc vào DBMS, các số có thể phải được chuyển dưới dạng chuỗi trước khi chúng có thể được đệm.
DBMS có RPAD()
bao gồm MySQL, MariaDB, PostgreSQL và Oracle.
DBMSs không có RPAD()
chức năng bao gồm SQL Server và SQLite.
Ví dụ
Đây là một ví dụ để chứng minh RPAD()
chức năng:
SELECT RPAD('Look Right', 40);
Kết quả:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+
Ở đây, phần bên phải của chuỗi được đệm bằng khoảng trắng (ký tự đệm mặc định) và chuỗi kết quả dài 40 ký tự (vì tôi đã chỉ định 40
như đối số thứ hai).
Oracle hoạt động tương tự, nhưng chúng ta cần sử dụng FROM DUAL
khi thực hiện một truy vấn như thế này (không truy vấn một bảng thực tế):
SELECT RPAD('Look Right', 40)
FROM DUAL;
Kết quả:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
Trong các ví dụ trên, tôi đã sử dụng rất nhiều phần đệm để làm cho phần đệm rõ ràng.
Dưới đây là một ví dụ khác có thể chứng minh phần đệm bên phải rõ ràng hơn:
SELECT CONCAT(RPAD('abc', 4), 'def');
Kết quả:
abc def
Trong trường hợp này, tôi đã nối abc
với def
nhưng abc
đã áp dụng phần đệm bên phải với RPAD()
chức năng.
Chỉ định một ký tự đệm
Phần đệm không nhất thiết phải là khoảng trống. Chúng tôi có thể tùy chọn thêm đối số thứ ba để chỉ định ký tự (hoặc các ký tự) để sử dụng trong phần đệm.
SELECT RPAD('Rat', 4, 't');
Kết quả:
Ratt
Nó cũng có thể được sử dụng để đệm các số bên phải bằng số 0 (hoặc một chữ số khác):
SELECT RPAD('7', 3, '0');
Kết quả:
700
Điều này rõ ràng làm thay đổi số và trong trường hợp này, điều tương tự có thể đạt được chỉ đơn giản bằng cách nhân số với 100. Tuy nhiên, việc nhân một số không thực sự áp dụng đệm cho nó.
Ví dụ sau đây chứng minh ý tôi muốn nói:
SELECT RPAD('77', 3, '0');
Kết quả:
770
Nhân 77 với 100 sẽ có kết quả sai.
Trong các ví dụ trên, tôi đã chuyển số dưới dạng chuỗi.
Trong một số DBMS (chẳng hạn như MariaDB và MySQL), chúng ta có thể chuyển số dưới dạng số, cũng như số để đệm nó với:
SELECT RPAD(7, 3, 0);
Kết quả:
700
Chúng tôi cũng có thể làm điều này trong Oracle:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Kết quả:
700
Nhưng PostgreSQL có vấn đề với điều này:
SELECT RPAD(7, 3, 0);
Kết quả:
ERROR: function rpad(integer, integer, integer) does not exist
Máy chủ SQL
Máy chủ SQL không có RPAD()
nhưng điều đó không ngăn chúng tôi thêm phần đệm vào số và chuỗi.
Số
Nếu số có phần thập phân, thì FORMAT()
hàm sẽ đủ:
SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
Kết quả:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
Cách thức hoạt động là chúng ta chuyển số, theo sau là một chuỗi định dạng. Trong ví dụ trên, chuỗi định dạng bao gồm các từ định dạng số tùy chỉnh dẫn đến số ban đầu có các chữ số được thêm vào phần phân số của nó. Nếu chưa có nhiều chữ số như vậy trong số ban đầu, thì nó sẽ được đệm bằng các số không.
Nhưng nếu số không có phần thập phân, thì chúng ta có thể sử dụng REPLACE()
chức năng xóa dấu phân tách thập phân được áp dụng với FORMAT()
chức năng:
SELECT
REPLACE(FORMAT(7, '.00', 'en-US'), '.', '') AS "1",
REPLACE(FORMAT(17, '.00', 'en-US'), '.', '') AS "2",
REPLACE(FORMAT(73.5, '.00', 'en-US'), '.', '') AS "3";
Kết quả:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
Phương pháp này cũng có thể được sử dụng để thêm các số 0 ở đầu nếu cần. Chỉ cần thêm chúng vào bên trái dấu thập phân trong chuỗi định dạng.
Ở đây, Tôi đã sử dụng rõ ràng en-US
làm đối số thứ ba (tùy chọn) để đảm bảo rằng dấu phân tách thập phân là dấu chấm / dấu chấm đầy đủ, đây là quy ước được sử dụng bởi en-US
ngôn ngữ.
Văn bản
Dưới đây là một kỹ thuật có thể được sử dụng trên dữ liệu văn bản:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Kết quả:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
Mặc dù bạn sẽ cần phải cẩn thận để không vô tình cắt một phần của chuỗi hoặc thêm các khoảng trắng không mong muốn.