Aracılığıyla paylaş


NULLIF (Transact-SQL)

Belirtilen iki ifadeler eşit olması durumunda bir null değeri döndürür.

Konu bağlantısı simgesiTransact-SQL sözdizimi kuralları

Sözdizimi

NULLIF ( expression , expression )

Bağımsız değişkenler

  • expression
    Tüm geçerli skalerolanifade.

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