Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana NULLIF() Bekerja di SQL Server

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 ','.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin untuk menetapkan batas waktu untuk kueri SQL di Microsoft SQL Server?

  2. Pengkodean karakter default SQL Server

  3. Metode Pilihan untuk Menyimpan Kata Sandi Dalam Basis Data

  4. Pro vs. Kontra Menerapkan Lingkungan Cloud Hibrida

  5. SQL Server - menghentikan atau menghentikan eksekusi skrip SQL