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
Namekolom. Jika sama, makaNULLdikembalikan.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
Namekolom.
NULLIF()vsCASEKode berikut:
NULLIF(expr1,expr2)setara dengan
CASEberikut ini ekspresi:CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 ENDJumlah 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'