Di MariaDB, NULLIF()
fungsi 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( 5, 5 );
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( 5, 3 );
Hasil:
5
Dalam hal ini, argumen pertama dikembalikan.
String
Berikut adalah contoh yang membandingkan string:
SELECT
NULLIF( 'Papaya', 'Papaya' ) AS "Same",
NULLIF( 'Papaya', 'Salad' ) AS "Different";
Hasil:
+------+-----------+| Sama | Berbeda |+------+-----------+| NULL | Pepaya |+------+-----------+
Tanggal
Berikut ini contoh yang membandingkan tanggal:
SELECT
NULLIF( DATE '2000-10-30', DATE '2000-10-30' ) AS "Same",
NULLIF( DATE '2000-10-30', DATE '1999-10-30' ) AS "Different";
Hasil:
+------+------------+| Sama | Berbeda |+------+------------+| NULL | 2000-10-30 |+------+------------+
Ekspresi
NULLIF()
mengevaluasi nilai ekspresi saat ini. Oleh karena itu, jika kita memberikan ekspresi seperti ini:
SELECT NULLIF( 10, 2 * 5 );
Kami mendapatkan ini:
NULL
2 dikalikan dengan 5 adalah 10, sehingga kedua argumen tersebut setara.
Inilah yang terjadi jika kita mengubah argumen kedua:
SELECT NULLIF( 10, 3 * 5 );
Hasil:
10
Argumen pertama dikembalikan.
Contoh Basis Data
Misalkan kita menjalankan kueri berikut:
SELECT
Name,
LocalName
FROM country
ORDER BY Name ASC
LIMIT 10;
Hasil:
+---------------------+-----------------------+ | Nama | LocalName |+---------------------+-----------------------+| Afghanistan | Afganistan/Afqanestan || Albania | Shqipëria || Aljazair | Al-Jaza'ir/Algérie || Samoa Amerika | Amerika Samoa || Andora | Andora || Angola | Angola || Anguila | Anguila || Antartika | – || Antigua dan Barbuda | Antigua dan Barbuda || Argentina | Argentina |+---------------------+-----------------------+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 Different" FROM country ORDER BY Name ASC LIMIT 10;
Hasil:
+---------------------+-----------------------+ -----------------------+| Nama | Nama Lokal | Nama Lokal Berbeda |+---------------------+----------------------- +-----------------------+| Afghanistan | Afganistan/Afqanestan | Afganistan/Afqanestan || Albania | Shqipëria | Shqipëria || Aljazair | Al-Jaza'ir/Aljazair | Al-Jaza'ir/Algérie || Samoa Amerika | Amerika Samoa | Amerika Samoa || Andora | Andora | NULL || Angola | Angola | NULL || Anguila | Anguila | NULL || Antartika | – | – || Antigua dan Barbuda | Antigua dan Barbuda | NULL || Argentina | Argentina | NULL |+---------------------+-----------------------+- -----------------------+Kita dapat melihat bahwa kolom ketiga mengembalikan nama lokal hanya jika berbeda dengan nilai di
Name
kolom. Jika sama, makaNULL
dikembalikan.Sebagai alternatif, kita dapat menggunakan
NULLIF()
untuk memfilter hasil kueri kami:SELECT Name, LocalName FROM country WHERE NULLIF(LocalName, Name) IS NOT NULL ORDER BY Name ASC LIMIT 10;
Hasil:
+----------------+-----------------------+| Nama | LocalName |+----------------+-----------------------+| Afghanistan | Afganistan/Afqanestan || Albania | Shqipëria || Aljazair | Al-Jaza'ir/Algérie || Samoa Amerika | Amerika Samoa || Antartika | – || Armenia | Hajastan || Austria | sterreich || Azerbaijan | Azärbaycan || Bahama | Bahama || Bahrain | Al-Bahrayn |+----------------+-----------------------+Dalam hal ini, kami hanya mengembalikan baris yang nama lokalnya berbeda dengan
Name
kolom.
NULLIF()
vsCASE
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( 10 );
Hasil:
ERROR 1582 (42000):Jumlah parameter salah dalam panggilan ke fungsi asli 'NULLIF'