Bagikan melalui


NULLIF (Transact-SQL)

Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric

Menghasilkan nilai null jika dua ekspresi yang ditentukan sama. Misalnya, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; mengembalikan NULL untuk kolom pertama (4 dan 4) karena dua nilai input sama. Kolom kedua mengembalikan nilai pertama (5) karena dua nilai input berbeda.

Konvensi sintaks transact-SQL

Sintaks

NULLIF ( expression , expression )  

Argumen

expression
Adalah ekspresi skalar yang valid.

Jenis Kembalian

Mengembalikan jenis yang sama dengan ekspresi pertama.

NULLIF mengembalikan ekspresi pertama jika kedua ekspresi tidak sama. Jika ekspresi sama, NULLIF mengembalikan nilai null dari jenis ekspresi pertama.

Keterangan

NULLIF setara dengan ekspresi CASE yang dicari di mana kedua ekspresi sama dan ekspresi yang dihasilkan adalah NULL.

Kami menyarankan agar Anda tidak menggunakan fungsi dependen waktu, seperti RAND(), dalam fungsi NULLIF. Ini dapat menyebabkan fungsi dievaluasi dua kali dan mengembalikan hasil yang berbeda dari dua pemanggilan.

Contoh

J. Mengembalikan jumlah anggaran yang tidak berubah

Contoh berikut membuat budgets tabel untuk menampilkan departemen (dept) anggarannya saat ini (current_year) dan anggaran sebelumnya (previous_year). Untuk tahun ini, NULL digunakan untuk departemen dengan anggaran yang tidak berubah dari tahun sebelumnya, dan 0 digunakan untuk anggaran yang belum ditentukan. Untuk mengetahui rata-rata hanya departemen yang menerima anggaran dan untuk menyertakan nilai anggaran dari tahun sebelumnya (gunakan previous_year nilai , di mana current_year adalah NULL), gabungkan NULLIF fungsi dan COALESCE .

CREATE TABLE dbo.budgets  
(  
   dept            TINYINT   IDENTITY,  
   current_year    DECIMAL   NULL,  
   previous_year   DECIMAL   NULL  
);  
INSERT budgets VALUES(100000, 150000);  
INSERT budgets VALUES(NULL, 300000);  
INSERT budgets VALUES(0, 100000);  
INSERT budgets VALUES(NULL, 150000);  
INSERT budgets VALUES(300000, 250000);  
GO    
SET NOCOUNT OFF;  
SELECT AVG(NULLIF(COALESCE(current_year,  
   previous_year), 0.00)) AS [Average Budget]  
FROM budgets;  
GO  

Berikut set hasilnya.

Average Budget  
--------------  
212500.000000  
(1 row(s) affected)

B. Membandingkan NULLIF dan CASE

Untuk memperlihatkan kesamaan antara NULLIF dan CASE, kueri berikut mengevaluasi apakah nilai dalam MakeFlag kolom dan FinishedGoodsFlag sama. Kueri pertama menggunakan NULLIF. Kueri kedua menggunakan CASE ekspresi .

USE AdventureWorks2022;  
GO  
SELECT ProductID, MakeFlag, FinishedGoodsFlag,   
   NULLIF(MakeFlag,FinishedGoodsFlag) AS [Null if Equal]  
FROM Production.Product  
WHERE ProductID < 10;  
GO  
  
SELECT ProductID, MakeFlag, FinishedGoodsFlag, [Null if Equal] =  
   CASE  
       WHEN MakeFlag = FinishedGoodsFlag THEN NULL  
       ELSE MakeFlag  
   END  
FROM Production.Product  
WHERE ProductID < 10;  
GO  

C: Mengembalikan jumlah anggaran yang tidak berisi data

Contoh berikut membuat budgets tabel, memuat data, dan menggunakan NULLIF untuk mengembalikan null jika current_year null atau berisi data yang sama dengan previous_year.


Copy
CREATE TABLE budgets (  
   dept           TINYINT,  
   current_year   DECIMAL(10,2),  
   previous_year  DECIMAL(10,2)  
);  
  
INSERT INTO budgets VALUES(1, 100000, 150000);  
INSERT INTO budgets VALUES(2, NULL, 300000);  
INSERT INTO budgets VALUES(3, 0, 100000);  
INSERT INTO budgets VALUES(4, NULL, 150000);  
INSERT INTO budgets VALUES(5, 300000, 300000);  
  
SELECT dept, NULLIF(current_year,  
   previous_year) AS LastBudget  
FROM budgets;  

Berikut set hasilnya.

dept   LastBudget  
----   -----------  
1      100000.00  
2      null 
3      0.00  
4      null  
5      null

Lihat Juga

CASE (Transact-SQL)
desimal dan numerik (Transact-SQL)
Fungsi Sistem (Transact-SQL)