Aracılığıyla paylaş


NULLIF (Transact-sql)

Iki ifadeler eşit belirtilen boş değer döndürür.

Konu bağlantısı simgesi 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

Ayrıca bkz.

Başvuru

CASE (Transact-sql)

ondalık ve sayısal (Transact-sql)

Sistem işlevler (Transact-sql)