Di SQL Server, NULLIF()
ekspresi memeriksa nilai dari dua ekspresi yang ditentukan. Ini mengembalikan nilai nol jika mereka sama, jika tidak maka akan mengembalikan ekspresi pertama.
Sintaks
Sintaksnya seperti ini:
NULLIF ( expression , expression )
Contoh
Berikut ini contoh untuk didemonstrasikan:
SELECT NULLIF(3, 3);
Hasil:
NULL
Di sini, kedua ekspresi sama, sehingga hasilnya adalah nilai nol.
Inilah yang terjadi ketika ekspresi tidak sama:
SELECT NULLIF(3, 7);
Hasil:
3
Kali ini nilai pertama dikembalikan.
Berikut adalah contoh yang merangkum kedua hasil:
SELECT
NULLIF(0, 0) AS a,
NULLIF(3, 3) AS b,
NULLIF(3, 0) AS c,
NULLIF(0, 3) AS d;
Hasil:
+------+------+-----+-----+ | a | b | c | d | |------+------+-----+-----| | NULL | NULL | 3 | 0 | +------+------+-----+-----+
Contoh Praktis
Misalkan kita memiliki tabel dengan data berikut:
SELECT
ProductName,
ProductPrice
FROM Products;
Hasil:
+-------------------------------------+----------------+ | ProductName | ProductPrice | |-------------------------------------+----------------| | Left handed screwdriver | 25.99 | | Long Weight (blue) | 14.75 | | Long Weight (green) | 11.99 | | Smash 2000 Sledgehammer | 0.00 | | Chainsaw (includes 3 spare fingers) | 0.00 | | Straw Dog Box | NULL | | Bottomless Coffee Mugs (4 Pack) | 9.99 | | Right handed screwdriver | 25.99 | +-------------------------------------+----------------+ (8 rows affected)
Dan misalkan kita ingin mengetahui berapa banyak produk yang memiliki harga positif. Dengan kata lain, kami tidak ingin menyertakan produk yang memiliki harga atau nol atau nilai nol.
Untuk melakukan ini, kita dapat menggunakan NULLIF()
dalam hubungannya dengan COUNT()
fungsi:
SELECT
COUNT(NULLIF(ProductPrice, 0.00)) AS Result
FROM Products;
Hasil:
+----------+ | Result | |----------| | 5 | +----------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Kami mendapatkan 5 seperti yang diharapkan, yaitu berapa banyak baris yang memiliki nilai positif di ProductPrice
kolom.
Ini berfungsi karena COUNT()
fungsi hanya menghitung nilai bukan nol. Dengan mengonversi jumlah nol menjadi nol, kami dapat mengabaikan nilai tersebut dalam perhitungan kami.
Ini dia lagi tanpa NULLIF()
fungsi.
SELECT COUNT(ProductPrice) AS Result
FROM Products;
Hasil:
+----------+ | Result | |----------| | 7 | +----------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Kali ini termasuk jumlah nol dan kita mendapatkan 7. Itu masih mengabaikan baris 6 karena itu sebenarnya memiliki nilai nol.
Bila Argumen Pertama adalah Konstanta Null
Fungsi tidak menerima konstanta nol sebagai argumen pertamanya:
SELECT NULLIF(null, 3);
Hasil:
Msg 4151, Level 16, State 1, Line 1 The type of the first argument to NULLIF cannot be the NULL constant because the type of the first argument has to be known.
Seperti yang dinyatakan oleh pesan kesalahan, jenis argumen pertama harus diketahui. Nilai kembalian fungsi menggunakan tipe data dari ekspresi pertama, dan kesalahan ini mencerminkan hal itu.
Kesalahan ini seharusnya sangat jarang. Dalam kebanyakan kasus, Anda akan memberikan nama kolom sebagai argumen pertama, dan di SQL Server, kolom memiliki tipe data yang ditentukan. Dalam kasus seperti itu, nilai null akan benar-benar diterima, karena SQL Server mengetahui tipe data kolom.
Hal yang sama dapat dikatakan untuk variabel. Jika Anda meneruskan sebuah variabel, Anda harus mendeklarasikan tipenya, dan karena itu, Anda tidak akan mendapatkan kesalahan.
Jumlah Argumen Tidak Valid
Memanggil fungsi tanpa meneruskan argumen apa pun menghasilkan kesalahan:
SELECT NULLIF();
Hasil:
Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ')'.
Dan memberikan terlalu banyak argumen juga menyebabkan kesalahan:
SELECT NULLIF(1, 2, 3);
Hasil:
Msg 102, Level 15, State 1, Line 1 Incorrect syntax near ','.