MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

MariaDB NULLIF() Dijelaskan

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, maka NULL 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() 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( 10 ); 

Hasil:

ERROR 1582 (42000):Jumlah parameter salah dalam panggilan ke fungsi asli 'NULLIF'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB SYSTEM_USER() Dijelaskan

  2. Kepatuhan PCI untuk MySQL &MariaDB Dengan ClusterControl

  3. DBaaS, cloud, dan perutean kueri transparan

  4. Bagaimana GREATEST() Bekerja di MariaDB

  5. 4 Fungsi yang Mengembalikan Menit dari Nilai Waktu di MariaDB