Di MySQL, terkadang Anda tidak ingin nilai NULL dikembalikan sebagai NULL . Terkadang Anda ingin nilai NULL dikembalikan dengan nilai yang berbeda, seperti “N/A”, “Not Applicable”, “None”, atau bahkan string kosong “”.
Untungnya ada beberapa cara untuk melakukan ini di MySQL.
Berikut empatnya:
IFNULL()fungsiCOALESCE()fungsiIF()fungsi yang digabungkan denganIS NULL(atauIS NOT NULL) operatorCASEekspresi dikombinasikan denganIS NULL(atauIS NOT NULL) operator
Contoh opsi ini ada di bawah.
Contoh Data
Pertama, mari ambil beberapa contoh data:
USE Solutions; SELECT TaskCode From Tasks;
Hasil:
+----------+ | TaskCode | +----------+ | gar123 | | NULL | | NULL | | dog456 | | NULL | | cat789 | +----------+
Jadi kami memiliki tiga nilai NULL dan tiga nilai non-NULL.
Fungsi IFNULL()
Mengingat namanya, ini mungkin opsi yang paling jelas untuk mengganti nilai NULL di MySQL. Fungsi ini pada dasarnya setara dengan ISNULL() di SQL Server.
IFNULL() fungsi memungkinkan Anda untuk memberikan dua argumen. Argumen pertama dikembalikan hanya jika bukan NULL. Jika NULL, maka argumen kedua akan dikembalikan.
Berikut ini contoh penggunaan IFNULL() terhadap kumpulan data sampel kami:
SELECT IFNULL(TaskCode, 'N/A') AS Result FROM Tasks;
Hasil:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Di sini, kami hanya mengganti nilai NULL dengan N/A .
Fungsi COALESCE()
Fungsi ini mirip dengan IFNULL() fungsi, tetapi sedikit berbeda. Fungsi ini mematuhi standar ANSI SQL , dan diterapkan secara luas di berbagai RDBMS .
Cara kerjanya adalah, Anda memberikan argumen sebanyak yang Anda butuhkan. COALESCE() kemudian akan mengembalikan non-NULL . pertama nilai dalam daftar, atau NULL jika tidak ada non-NULL nilai.
Seperti ini:
SELECT COALESCE(TaskCode, 'N/A') AS Result FROM Tasks;
Hasil:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Jadi kita mendapatkan hasil yang sama persis seperti sebelumnya.
Namun, perbedaan dengan fungsi ini adalah, seperti yang disebutkan, Anda dapat memberikan daftar argumen. COALESCE() fungsi akan mengambil mana saja yang merupakan nilai non-NULL pertama.
Jadi misalnya, kita bisa menambahkan NULL sebagai argumen pertama dan tempatkan None sebelum N/A dan lihat apa yang terjadi:
SELECT COALESCE(NULL, TaskCode, 'None', 'N/A') AS Result FROM Tasks;
Hasil:
+--------+ | Result | +--------+ | gar123 | | None | | None | | dog456 | | None | | cat789 | +--------+
Itu melewatkan NULL pertama seperti yang diharapkan, kemudian melewatkan nilai NULL apa pun di TaskCode kolom, sebelum menetapkan None . N/A nilai tidak digunakan dalam kasus ini karena None didahulukan dan ini bukan nilai NULL.
Fungsi IF() Dikombinasikan dengan IS NULL/IS NOT NULL
IS NULL dan IS NOT NULL operator memungkinkan Anda untuk menguji nilai NULL, dan menyajikan nilai yang berbeda tergantung pada hasilnya.
Kita dapat menggunakan operator ini di dalam IF() fungsi, sehingga nilai non-NULL dikembalikan, dan nilai NULL diganti dengan nilai yang kita pilih.
Contoh:
SELECT IF(TaskCode IS NOT NULL, TaskCode, 'N/A') AS Result FROM Tasks;
Hasil:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Jadi hasil yang sama dengan IFNULL() dan COALESCE() fungsi.
Dan tentu saja, kita dapat menukar IS NOT NULL dengan IS NULL . Jika kita melakukannya, kita juga perlu menukar argumen berikut:
SELECT IF(TaskCode IS NULL, 'N/A', TaskCode) AS Result FROM Tasks;
Ekspresi KASUS Dikombinasikan dengan IS NULL/IS NOT NULL
Cara lain untuk melakukannya adalah dengan menggunakan CASE ekspresi:
SELECT
CASE
WHEN TaskCode IS NOT NULL THEN TaskCode
ELSE 'N/A'
END AS Result
FROM Tasks;
Hasil:
+--------+ | Result | +--------+ | gar123 | | N/A | | N/A | | dog456 | | N/A | | cat789 | +--------+
Seperti contoh sebelumnya, ini dapat ditulis ulang untuk menggunakan IS NULL bukannya IS NOT NULL :
SELECT
CASE
WHEN TaskCode IS NULL THEN 'N/A'
ELSE TaskCode
END AS Result
FROM Tasks;