Di MySQL, NULLIF()
adalah fungsi kontrol aliran yang mengembalikan NULL
jika kedua argumennya ekuivalen. Jika tidak, ia mengembalikan argumen pertama.
Sintaks
Sintaksnya seperti ini:
NULLIF(expr1,expr2)
Contoh
Berikut ini contoh untuk didemonstrasikan:
SELECT NULLIF( 7, 7 );
Hasil:
NULL
Dalam hal ini, kedua argumen identik dan hasilnya adalah NULL
.
Ketika Argumen Tidak Ekuivalen
Inilah yang terjadi jika argumennya tidak setara:
SELECT NULLIF( 7, 8 );
Hasil:
7
Argumennya berbeda dan argumen pertama dikembalikan.
String
Berikut adalah contoh yang membandingkan string:
SELECT
NULLIF( 'Bean', 'Bean' ) AS "Same",
NULLIF( 'Bean', 'Mushroom' ) AS "Different";
Hasil:
Same Different ---- --------- NULL Bean
Tanggal
Berikut ini contoh yang membandingkan tanggal:
SELECT
NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";
Hasil:
Same Different ---- ---------- NULL 2030-12-20
Ekspresi
NULLIF()
mengevaluasi nilai ekspresi saat ini. Oleh karena itu, jika kita memberikan ekspresi seperti ini:
SELECT NULLIF( 8, 2 * 4 );
Kami mendapatkan ini:
NULL
2 dikalikan 4 adalah 8, sehingga kedua argumen tersebut ekuivalen.
Inilah yang terjadi jika kita mengubah argumen kedua:
SELECT NULLIF( 8, 2 * 3 );
Hasil:
8
Argumen pertama dikembalikan.
Contoh Basis Data
Misalkan kita menjalankan kueri berikut:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
Hasil:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Andorra | Andorra | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Gibraltar | Gibraltar | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Malta | Malta | | Portugal | Portugal | | San Marino | San Marino | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
Di sini, kami memiliki nama negara di kolom kiri, dan nama lokal untuk masing-masing negara di kanan.
Mari tambahkan NULLIF()
ke kolom ketiga dari kueri kami:
SELECT
Name,
LocalName,
NULLIF(LocalName, Name) AS "Local Name if Different"
FROM country
WHERE Region = 'Southern Europe'
ORDER BY Name;
Hasil:
+-------------------------------+--------------------------------+--------------------------------+ | Name | LocalName | Local Name if Different | +-------------------------------+--------------------------------+--------------------------------+ | Albania | Shqipëria | Shqipëria | | Andorra | Andorra | NULL | | Bosnia and Herzegovina | Bosna i Hercegovina | Bosna i Hercegovina | | Croatia | Hrvatska | Hrvatska | | Gibraltar | Gibraltar | NULL | | Greece | Elláda | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | Santa Sede/Città del Vaticano | | Italy | Italia | Italia | | Macedonia | Makedonija | Makedonija | | Malta | Malta | NULL | | Portugal | Portugal | NULL | | San Marino | San Marino | NULL | | Slovenia | Slovenija | Slovenija | | Spain | España | España | | Yugoslavia | Jugoslavija | Jugoslavija | +-------------------------------+--------------------------------+--------------------------------+
Kita dapat melihat bahwa kolom ketiga mengembalikan nama lokal hanya jika berbeda dengan nilai di Name
kolom. Jika sama, maka NULL
dikembalikan.
Kita juga bisa menggunakan NULLIF()
untuk memfilter hasil kueri kami:
SELECT
Name,
LocalName
FROM country
WHERE Region = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;
Hasil:
+-------------------------------+--------------------------------+ | Name | LocalName | +-------------------------------+--------------------------------+ | Albania | Shqipëria | | Bosnia and Herzegovina | Bosna i Hercegovina | | Croatia | Hrvatska | | Greece | Elláda | | Holy See (Vatican City State) | Santa Sede/Città del Vaticano | | Italy | Italia | | Macedonia | Makedonija | | Slovenia | Slovenija | | Spain | España | | Yugoslavia | Jugoslavija | +-------------------------------+--------------------------------+
Dalam hal ini, kami hanya mengembalikan baris yang nama lokalnya berbeda dengan Name
kolom.
NULLIF()
vs CASE
Kode berikut:
NULLIF(expr1,expr2)
setara dengan CASE
berikut ini ekspresi:
CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END
Jumlah Parameter Salah
Melewati jumlah argumen yang salah, menghasilkan kesalahan:
SELECT NULLIF( 5 );
Hasil:
ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'