Aracılığıyla paylaş


NULLIF (Transact-SQL)

Şunlar için geçerlidir:SQL ServerAzure SQL VeritabanıAzure SQL Yönetilen ÖrneğiAzure Synapse AnalyticsAnaliz Platformu Sistemi (PDW)Microsoft Fabric'teki SQL analiz uç noktasıMicrosoft Fabric'teki ambarMicrosoft Fabric'teki SQL veritabanı

Belirtilen iki ifade eşitse null değer döndürür. Örneğin, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different; iki giriş değeri aynı olduğundan ilk sütun (4 ve 4) için NULL döndürür. İki giriş değeri farklı olduğundan ikinci sütun ilk değeri (5) döndürür.

Transact-SQL söz dizimi kuralları

Syntax

NULLIF ( expression , expression )  

Arguments

expression
Geçerli bir skaler ifadedir.

Dönüş Türleri

İlk ifadeyle aynı türü döndürür.

İki ifade eşit değilse, NULLIF ilk ifadeyi döndürür. İfadeler eşitse, NULLIF ilk ifadenin türünde null bir değer döndürür.

Remarks

NULLIF, iki ifadenin eşit olduğu ve sonuçta elde edilen ifadenin NULL olduğu, aranan CASE ifadesine eşdeğerdir.

NULLIF işlevinde S_SAYI_ÜRET() gibi zamana bağımlı işlevleri kullanmamanızı öneririz. Bu, işlevin iki kez değerlendirilmesine ve iki çağrıdan farklı sonuçlar döndürmesine neden olabilir.

Examples

A. Değişmeyen bütçe tutarlarını iade etme

Aşağıdaki örnek, bir departmanın () geçerli bütçesini (budgets) ve önceki bütçesini (deptcurrent_year) göstermek için bir previous_year tablo oluşturur. Geçerli yıl için, NULL önceki yıldan itibaren değişmeyen bütçeleri olan departmanlar için kullanılır ve 0 henüz belirlenmemiş bütçeler için kullanılır. Yalnızca bütçe alan bölümlerin ortalamasını bulmak ve önceki yıla ait bütçe değerini dahil etmek için (değerini kullanın, burada previous_year değerini current_yearkullanınNULL), ve NULLIF işlevlerini birleştirinCOALESCE.

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  

Sonuç kümesi aşağıdadır.

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

B. NULLIF ve CASE karşılaştırması

ile NULLIFarasındaki CASE benzerliği göstermek için aşağıdaki sorgular ve MakeFlag sütunlarındaki değerlerin FinishedGoodsFlag aynı olup olmadığını değerlendirir. İlk sorguda kullanılır NULLIF. İkinci sorgu ifadeyi CASE kullanır.

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: Veri içermeyen bütçe tutarlarını döndürme

Aşağıdaki örnek bir budgets tablo oluşturur, verileri yükler ve null ise NULLIF null döndürmek için kullanır current_year veya ile previous_yearaynı verileri içerir.


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;  

Sonuç kümesi aşağıdadır.

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

Ayrıca Bkz.

CASE (Transact-SQL)
ondalık ve sayısal (Transact-SQL)
Sistem İşlevleri (Transact-SQL)