NULLIF (Transact-SQL)
Belirtilen iki ifadeler eşit olması durumunda bir null değeri döndürür.
Sözdizimi
NULLIF ( expression , expression )
Dönüş Türleri
İlk olarak aynı türde döndürür expression.
NULLIF işlevi ilk expression , iki deyimleridir eşittir.İfadeler eşit olması durumunda, NULLIF ilk türü null değerini döndürür expression.
Açıklamalar
NULLIF iki ifadeler eşit olduğu ve elde edilen ifade null olduğu bir Aranan case ifade eşdeğerdir.
saatkullanmamanız önerilir-NULLIF işleviçinde rand() gibi bağımlı işlevler.Bu işlev evaluted iki kez ve iki çağırmaları farklı sonuçlar döndürmek için neden olabilir.
Örnekler
A.Değişmemiş bütçe tutarlarını döndürme
Aşağıdaki örnek oluşturur bir budgetsbir bölümü göstermek içintablo ( dept), geçerli bütçe (current_year) ve onun önceki bütçe (previous_year).Geçerli yıl için NULL önceki yıldan değişmemiştir bütçelerle bölümler için kullanılır ve 0 değil henüz belirlendi bütçeler için kullanılır.Bütçe aldığınız bölümler ortalama bulmak ve önceki yılın bütçe değeri eklemek için (kullanmak previous_year değeri, nerede current_year olan NULL), birleştirmek NULLIF ve COALESCE işlevleri.
USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.budgets','U') IS NOT NULL
DROP TABLE budgets;
GO
SET NOCOUNT ON;
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 buradadır.
Average Budget
--------------
212500.000000
(1 row(s) affected)
B.NULLIF ve case karşılaştırma
Arasında benzerlik göstermek için NULLIF ve CASE, aşağıdaki sorgular değerlendirmek mi değerler MakeFlag ve FinishedGoodsFlag sütunları aynıdır.İlk sorguyu kullanır NULLIF.İkinci sorguyu kullanır CASE ifade.
USE AdventureWorks2008R2;
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
Ayrıca bkz.