Masalah:
Anda ingin menggabungkan NULL dengan nilai string dari kolom berbeda di SQL Server.
Contoh:
Basis data kami memiliki tabel bernama children
dengan data di kolom berikut:id (kunci utama), nama_depan , nama_tengah , dan nama_belakang .
id | nama_depan | nama_tengah | nama_belakang |
---|---|---|---|
1 | Linda | NULL | Jackson |
2 | Maria | Alice | Thomson |
3 | NULL | Steven | NULL |
4 | NULL | NULL | Coklat |
Kami ingin menampilkan nama depan dari satu kolom, nama tengah dari kolom berikutnya, dan nama belakang dari kolom terakhir sebagai satu string, bahkan jika salah satu kolom menyimpan NULL.
Solusi 2:
Kami akan menggunakan CONCAT()
fungsi. Inilah kueri yang akan Anda tulis:
SELECT CONCAT(first_name, middle_name, last_name) AS name FROM children;
Ini hasilnya:
nama |
---|
LindaJackson |
MaryAliceThomson |
Steven |
Coklat |
Diskusi:
Gunakan CONCAT()
fungsi untuk menggabungkan nilai string dari ekspresi atau kolom yang berisi NULL. Fungsi ini mengambil daftar string (atau NULL) dan menampilkan semua nilai ini dalam satu string. Tidak ada pemisah antara nilai, sehingga hasilnya (seperti dalam contoh kami) mungkin tidak diformat seperti yang Anda harapkan. Bagaimana kita bisa memperbaiki ini? Lihat CONCAT()
lainnya permintaan:
Solusi 2:
Berikut opsi kueri lainnya:
SELECT CONCAT(first_name,' ' , middle_name, ' ',last_name) AS name FROM children;
Ini hasilnya:
nama |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Coklat |
Sekarang, selain dari nilai string, fungsi ini juga mengambil beberapa spasi (ditempatkan di antara nilai gabungan). Ini memisahkan satu bagian dari nama dari yang lain. Tapi seperti yang kita lihat, solusi ini juga tidak ideal; nama lengkap tanpa nama tengah memiliki spasi tambahan, sedangkan catatan dengan hanya satu nama memiliki dua spasi tambahan.
Dalam hal ini, CONCAT_WS()
fungsi adalah solusi yang lebih baik.
Solusi 3:
CONCAT_WS()
function mengambil argumen pertama tambahan:karakter yang berfungsi sebagai pemisah antar string. Berikut pertanyaannya:
SELECT CONCAT_WS(' ' , first_name, middle_name, last_name) AS name FROM children;
Dan hasilnya:
nama |
---|
Linda Jackson |
Mary Alice Thomson |
Steven |
Coklat |
Kueri ini menampilkan nama lengkap anak-anak, tanpa spasi yang tidak diperlukan.