Jika Anda menggunakan Oracle Database atau MySQL, Anda cukup beruntung memiliki LPAD()
dan RPAD()
fungsi, yang memungkinkan Anda memasukkan string dengan karakter (atau karakter) tertentu ke kiri dan/atau kanannya.
Namun, SQL Server (atau lebih tepatnya, T-SQL), tidak menyertakan fungsi-fungsi ini. Jadi, jika Anda membutuhkan bantalan kiri, Anda harus berimprovisasi.
Artikel ini menyajikan empat opsi untuk mengisi angka dengan nol di depan di SQL Server. Jadi Anda dapat melakukan hal-hal seperti turn 7
ke 007
. Tiga dari opsi ini berfungsi pada string, jadi Anda juga dapat menerapkan padding ke data tekstual.
Metode 1 – Gunakan Fungsi FORMAT()
Jika Anda perlu menerapkan angka nol di depan ke sebuah angka, maka opsi ini yang Anda butuhkan. Opsi ini menggunakan FORMAT()
fungsi. Fungsi ini mengembalikan nomor sebagai string dalam format yang kami tentukan:
SELECT FORMAT(7, '000');
Hasil:
007
Dalam hal ini, kami menggunakan 0
format specifier untuk memformat angka dengan nol di depan jika berlaku. Ini hanyalah salah satu dari banyak penentu format khusus. Penentu format khusus memungkinkan kami untuk sangat akurat tentang bagaimana nomor kami diformat.
Perhatikan bahwa FORMAT()
fungsi hanya untuk angka dan nilai datetime. Jadi, jika Anda perlu menerapkan padding ke string yang sebenarnya, baca terus.
Metode 2 – Gunakan Fungsi RIGHT()
Metode kedua menggunakan RIGHT()
berfungsi untuk mengembalikan hanya bagian paling kanan dari string, setelah menambahkan beberapa nol di depan.
Meskipun saya menerapkan angka nol di depan ke "angka" di sini, sebenarnya ini adalah representasi string dari angka. Jadi, jika Anda perlu menerapkan padding ke string alih-alih angka, maka metode ini akan berhasil.
SELECT RIGHT('000' + '1234', 7);
Hasil:
0001234
7
menentukan berapa banyak karakter hasil akhirnya (setelah nol ditambahkan).
Mengurangi Panjangnya
Jadi jika kita mengurangi angka itu, itu akan mengurangi jumlah nol di depan:
SELECT RIGHT('000' + '1234', 6);
Hasil:
001234
Meningkatkan Panjang
Tetapi jika kita menambah jumlahnya, kita perlu memastikan bahwa kita telah menetapkan angka nol yang cukup untuk membuat panjang yang dibutuhkan:
SELECT RIGHT('000000' + '1234', 10);
Hasil:
0000001234
Jika tidak, kita akan berakhir dengan ini:
SELECT RIGHT('000' + '1234', 10);
Hasil:
0001234
Memperpendek Angka
Perhatikan juga bahwa jika Anda tidak menentukan karakter yang cukup untuk panjang string yang dihasilkan, nomor akan terpotong, dan Anda hanya akan mendapatkan bagian paling kanan dari nomor:
SELECT RIGHT('000' + '1234', 2);
Hasil:
34
Jadi dalam kasus ini, angka awal dipotong ditambah angka nol di depannya diabaikan.
Ini adalah salah satu skenario di mana hasilnya berbeda dengan LPAD()
MySQL dan Oracle fungsi. Fungsi itu akan menghasilkan 2 digit pertama (tidak diisi) alih-alih 2 digit terakhir. Seperti ini:
SELECT LPAD(1234, 2, 0);
Hasil:
12
Jika Anda memerlukan solusi SQL Server yang akan berperilaku seperti LPAD()
dalam kasus seperti itu, coba ini:
SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);
Hasil:
12
Meskipun, ingatlah bahwa Anda mendapatkan hasil yang sama hanya dengan menggunakan LEFT()
berfungsi dengan sendirinya:
SELECT LEFT('1234', 2);
Hasil:
12
Selain itu, saya berjuang untuk memikirkan alasan mengapa ada orang yang ingin mempersingkat angka (mengingat mereka mencoba untuk menambahkannya), tetapi setidaknya ini adalah sesuatu yang perlu dipertimbangkan.
Metode 3 – Gunakan Kombinasi RIGHT() dan REPLICATE()
Cara ini hampir sama dengan cara sebelumnya, yang membedakan hanya tiga angka nol yang saya ganti dengan REPLICATE()
fungsi:
SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);
Hasil:
0001234
REPLICATE()
fungsi menyelamatkan Anda dari keharusan mengetik setiap nol (atau karakter lain) beberapa kali.
Metode Bonus:Metode 4 – Gunakan Kombinasi REPLACE() dan STR()
Metode ini datang dari sudut yang sama sekali berbeda dengan metode sebelumnya:
SELECT REPLACE(STR('1234', 6),' ','0');
Hasil:
001234
Di sini kita menggunakan REPLACE()
fungsi bersama dengan STR()
berfungsi untuk mengonversi angka menjadi string dengan panjang tertentu, lalu mengonversi karakter spasi apa pun menjadi nol.
Satu hal yang harus diperhatikan adalah, jika Anda mempersingkat angka (seperti yang kami lakukan pada contoh sebelumnya), Anda akan mendapatkan sekumpulan tanda bintang, bukan angka (yang disingkat):
SELECT REPLACE(STR('1234', 2),' ','0');
Hasil:
**