NULLIF (Transact-sql)
Iki ifadeler eşit belirtilen boş değer döndürür.
Transact-SQL Sözdizim Kuralları
Sözdizimi
NULLIF ( expression , expression )
Bağımsız değişkenler
- expression
Herhangi bir geçerli sayıl mı ifade.
Dönüş Türleri
İlk olarak aynı türde döndürür expression.
NULLIF verir ilk expressioniki ifadeler eşit değilse,. İfadeler eşit ise NULLIF ilk tip boş değer döndürür expression.
Açıklamalar
NULLIF iki ifadeler eşit ve elde edilen ifadesi null olduğu Aranan bir servis TALEBI ifade için eşdeğerdir.
Biz size bir NULLIF işlevde rand() gibi bir zaman bağımlı işlevleri kullanmanızı önermiyoruz. Bu işlev evaluted iki kez olmak ve iki çağırmaları farklı sonuç neden olabilir.
Örnekler
A.Değişmemiş bütçe tutarlarını döndürme
Aşağıdaki örnek bir budgetsbir bölümü göstermek için tablo (dept) geçerli bütçe (current_year) ve onun önceki bütçe (previous_year). Geçerli yıl için NULLbütçesi önceki yıl, değişmeyen bölümleri için kullanılır ve 0değil henüz belirlendi bütçeler için kullanılır. Sadece bir bütçe aldığınız bölümler ortalamasını bulmak ve önceki yıl bütçe değeri eklemek için (kullanmak previous_yeardeğeri, nerede current_yearolan NULL), birleştirmek NULLIFve COALESCEişlevleri.
USE AdventureWorks2012;
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
USE AdventureWorks2012;
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ındaki benzerliği göstermek için NULLIFve CASE, aşağıdaki sorgular değerlendirmek ister değerleri MakeFlagve FinishedGoodsFlagsütunları olan aynı. İlk sorguyu kullanır NULLIF. İkinci sorgu kullanır CASEifade.
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
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