Dalam SQL, RPAD()
digunakan untuk mengisi bagian kanan string dengan karakter tertentu. Fungsi ini dapat digunakan pada string dan angka, meskipun tergantung pada DBMS, angka mungkin harus dilewatkan sebagai string sebelum dapat diisi.
DBMS yang memiliki RPAD()
fungsi termasuk MySQL, MariaDB, PostgreSQL, dan Oracle.
DBMS yang tidak memiliki RPAD()
fungsi termasuk SQL Server dan SQLite.
Contoh
Berikut adalah contoh untuk mendemonstrasikan RPAD()
fungsi:
SELECT RPAD('Look Right', 40);
Hasil:
+------------------------------------------+ | RPAD('Look Right', 40) | +------------------------------------------+ | Look Right | +------------------------------------------+
Di sini, bagian kanan string diisi dengan spasi (karakter pengisi default), dan string yang dihasilkan panjangnya 40 karakter (karena saya menetapkan 40
sebagai argumen kedua).
Oracle bekerja dengan cara yang sama, tetapi kita perlu menggunakan FROM DUAL
saat melakukan kueri seperti ini (tanpa menanyakan tabel yang sebenarnya):
SELECT RPAD('Look Right', 40)
FROM DUAL;
Hasil:
RPAD('LOOKRIGHT',40) ___________________________________________ Look Right
Dalam contoh di atas, saya menggunakan banyak padding untuk membuat padding terlihat jelas.
Berikut contoh lain yang dapat menunjukkan padding yang tepat dengan lebih jelas:
SELECT CONCAT(RPAD('abc', 4), 'def');
Hasil:
abc def
Dalam hal ini, saya menggabungkan abc
dengan def
tapi abc
memiliki padding yang tepat diterapkan dengan RPAD()
fungsi.
Tentukan Karakter Padding
Padding tidak harus berupa ruang. Secara opsional, kita dapat menambahkan argumen ketiga untuk menentukan karakter (atau karakter) yang akan digunakan dalam padding.
SELECT RPAD('Rat', 4, 't');
Hasil:
Ratt
Ini juga dapat digunakan untuk nomor pad kanan dengan nol (atau digit lain):
SELECT RPAD('7', 3, '0');
Hasil:
700
Ini jelas mengubah angka dan dalam hal ini, hal yang sama dapat dicapai hanya dengan mengalikan angka dengan 100. Namun, mengalikan angka sebenarnya tidak menerapkan padding.
Contoh berikut menunjukkan apa yang saya maksud:
SELECT RPAD('77', 3, '0');
Hasil:
770
Mengalikan 77 dengan 100 akan menghasilkan hasil yang salah.
Dalam contoh di atas saya memberikan nomor sebagai string.
Di beberapa DBMS (seperti MariaDB dan MySQL) kita dapat memberikan nomor sebagai nomor, serta nomor untuk diisi dengan:
SELECT RPAD(7, 3, 0);
Hasil:
700
Kami juga dapat melakukan ini di Oracle:
SELECT RPAD(7, 3, 0)
FROM DUAL;
Hasil:
700
Tetapi PostgreSQL memiliki masalah dengan ini:
SELECT RPAD(7, 3, 0);
Hasil:
ERROR: function rpad(integer, integer, integer) does not exist
SQL Server
SQL Server tidak memiliki RPAD()
fungsi, tetapi itu tidak menghentikan kami untuk menambahkan padding ke angka dan string.
Angka
Jika bilangan tersebut memiliki bagian pecahan, FORMAT()
fungsi akan cukup:
SELECT
FORMAT(0.7, '.000') AS "1",
FORMAT(0.7, '0.00') AS "2",
FORMAT(7.0, '0.00') AS "3";
Hasil:
+------+------+------+ | 1 | 2 | 3 | |------+------+------| | .700 | 0.70 | 7.00 | +------+------+------+
Cara kerjanya adalah kita melewati nomor, diikuti dengan string format. Dalam contoh di atas, string format terdiri dari penentu format numerik khusus yang menghasilkan angka asli yang ditambahkan digit ke bagian pecahannya. Jika angka aslinya belum sebanyak itu, maka diisi dengan nol.
Tetapi jika bilangan tersebut tidak memiliki bagian pecahan, maka kita dapat menggunakan REPLACE()
berfungsi untuk menghapus pemisah desimal yang diterapkan dengan FORMAT()
fungsi:
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";
Hasil:
+-----+------+------+ | 1 | 2 | 3 | |-----+------+------| | 700 | 1700 | 7350 | +-----+------+------+
Metode ini juga dapat digunakan untuk menambahkan nol di depan jika diperlukan. Cukup tambahkan di sebelah kiri titik desimal dalam format string.
Di sini, Saya secara eksplisit menggunakan en-US
sebagai argumen ketiga (opsional) untuk memastikan bahwa pemisah desimal adalah titik/titik, yang merupakan konvensi yang digunakan oleh en-US
lokal.
Teks
Berikut teknik yang dapat digunakan pada data tekstual:
SELECT
LEFT('Dog' + '.........', 9) AS "1",
LEFT('Horse' + '.........', 9) AS "2",
LEFT('Crocodile' + '.........', 9) AS "3";
Hasil:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | Dog...... | Horse.... | Crocodile | +-----------+-----------+-----------+
Meskipun Anda harus berhati-hati untuk tidak memotong bagian string secara tidak sengaja, atau menambahkan spasi yang tidak diinginkan.