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
) operatorCASE
ekspresi 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;