NULLIF (SQL Transact)

Berlaku untuk:yes SQL Server (semua versi yang didukung) YesAzure SQL Database YesAzure SQL Managed Instance yesAzure Synapse Analytics yesAnalytics Platform System (PDW)

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 kedua nilai input sama. Kolom kedua mengembalikan nilai pertama (5) karena dua nilai input berbeda.

Topic link iconKonvensi Sintaksis T-SQL

Sintaks

NULLIF ( expression , expression )  

Argumen

ekspresi
Adalah ekspresi skalar yang valid.

Catatan

Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Jenis Pengembalian

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 yang bergantung pada waktu, seperti RAND(), dalam fungsi NULLIF. Hal ini dapat menyebabkan fungsi dievaluasi dua kali dan mengembalikan hasil yang berbeda dari dua pemanggilan.

Contoh

A. Mengembalikan jumlah anggaran yang tidak berubah

Contoh berikut membuat budgets tabel untuk memperlihatkan 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 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 adalah tataan hasil.

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 AdventureWorks2012;  
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 adalah hasil yang ditetapkan.

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 (SQL T-SQL)