NULL Pengendalian dalam MySQL CONCAT
Apabila menggunakan fungsi MySQL CONCAT, adalah penting untuk mempertimbangkan kesan nilai NULL. Jika mana-mana medan yang terlibat dalam penggabungan mengandungi NULL, keseluruhan keputusan juga akan menjadi NULL. Ini boleh membawa kepada hasil yang tidak dijangka dalam pertanyaan dan pelaporan.
Senario:
Pertimbangkan jadual bernama "peranti" dengan data berikut:
affiliate_name | affiliate_location | model | ip | os_type | os_version |
---|---|---|---|---|---|
cs1 | inter | Dell | 10.125.103.25 | Linux | Fedora |
cs2 | inter | Dell | 10.125.103.26 | Linux | Fedora |
cs3 | inter | Dell | 10.125.103.27 | NULL | NULL |
cs4 | inter | Dell | 10.125.103.28 | NULL | NULL |
Masalah:
Pertanyaan berikut bertujuan untuk gabungkan nilai daripada beberapa medan untuk mencipta "nama_peranti":
SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name FROM devices;
Walau bagaimanapun, disebabkan nilai NULL dalam baris 3 dan 4, hasilnya mengandungi NULL untuk baris tersebut:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora (NULL) (NULL)
Penyelesaian:
Untuk mengatasi masalah ini, anda boleh menggunakan fungsi COALESCE untuk menukar nilai NULL kepada rentetan kosong sebelum menggunakan CONCAT. Fungsi COALESCE mengambil berbilang argumen dan mengembalikan nilai bukan NULL pertama dalam senarai:
SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name FROM devices;
Pertanyaan yang dikemas kini ini menghasilkan output yang diingini:
cs1-Dell-10.125.103.25-Linux-Fedora cs2-Dell-10.125.103.26-Linux-Fedora cs3-Dell-10.125.103.27- cs4-Dell-10.125.103.28-
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai NULL dalam Fungsi MySQL CONCAT?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!