Rumah >pangkalan data >tutorial mysql >Mengapa CONCAT MySQL Kembali NULL Apabila Medan Mengandungi Nilai NULL, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa CONCAT MySQL Kembali NULL Apabila Medan Mengandungi Nilai NULL, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Patricia Arquetteasal
2024-12-27 04:25:11982semak imbas

Why Does MySQL's CONCAT Return NULL When Fields Contain NULL Values, and How Can I Fix It?

MySQL CONCAT Mengembalikan NULL untuk Medan yang Mengandungi NULL: Penyelesaian dan Alternatif

Fungsi CONCAT MySQL menggabungkan berbilang medan menjadi satu rentetan. Walau bagaimanapun, ia boleh menjadi masalah apabila sesetengah medan mengandungi nilai NULL, menyebabkan keseluruhan ungkapan mengembalikan NULL.

Gambaran Keseluruhan Masalah

Pertimbangkan jadual dan pertanyaan berikut:

Table: devices

| 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 |

Query:

SELECT CONCAT(`affiliate_name`,'-',`model`,'-',`ip`,'-',`os_type`,'-',`os_version`) AS device_name
FROM devices

Pertanyaan ini mengembalikan nama peranti sebagai berikut:

cs1-Dell-10.125.103.25-Linux-Fedora
cs2-Dell-10.125.103.26-Linux-Fedora
(NULL)
(NULL)

Penyelesaian: Gantikan NULL dengan Rentetan Kosong

Untuk mengabaikan nilai NULL dan sebaliknya menggabungkan rentetan kosong, anda boleh menggunakan fungsi COALESCE. COALESCE mengambil berbilang argumen dan mengembalikan argumen bukan NULL yang pertama.

Berikut ialah pertanyaan yang diubah suai:

SELECT CONCAT(COALESCE(`affiliate_name`,''),'-',COALESCE(`model`,''),'-',COALESCE(`ip`,''),'-',COALESCE(`os_type`,''),'-',COALESCE(`os_version`,'')) AS device_name
FROM devices

Pertanyaan ini mengembalikan hasil 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 Mengapa CONCAT MySQL Kembali NULL Apabila Medan Mengandungi Nilai NULL, dan Bagaimana Saya Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn