NULLIF (Transact-SQL)
Berlaku untuk: Titik akhir analitik SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Platform System (PDW) SQL di Microsoft Fabric Warehouse di Microsoft Fabric
Menghasilkan nilai null jika dua ekspresi yang ditentukan sama. Misalnya, SELECT NULLIF(4,4) AS Same, NULLIF(5,7) AS Different;
mengembalikan NULL untuk kolom pertama (4 dan 4) karena dua nilai input sama. Kolom kedua mengembalikan nilai pertama (5) karena dua nilai input berbeda.
Sintaks
NULLIF ( expression , expression )
Argumen
expression
Adalah ekspresi skalar yang valid.
Jenis Kembalian
Mengembalikan jenis yang sama dengan ekspresi pertama.
NULLIF mengembalikan ekspresi pertama jika kedua ekspresi tidak sama. Jika ekspresi sama, NULLIF mengembalikan nilai null dari jenis ekspresi pertama.
Keterangan
NULLIF setara dengan ekspresi CASE yang dicari di mana kedua ekspresi sama dan ekspresi yang dihasilkan adalah NULL.
Kami menyarankan agar Anda tidak menggunakan fungsi dependen waktu, seperti RAND(), dalam fungsi NULLIF. Ini dapat menyebabkan fungsi dievaluasi dua kali dan mengembalikan hasil yang berbeda dari dua pemanggilan.
Contoh
J. Mengembalikan jumlah anggaran yang tidak berubah
Contoh berikut membuat budgets
tabel untuk menampilkan departemen (dept
) anggarannya saat ini (current_year
) dan anggaran sebelumnya (previous_year
). Untuk tahun ini, NULL
digunakan untuk departemen dengan anggaran yang tidak berubah dari tahun sebelumnya, dan 0
digunakan untuk anggaran yang belum ditentukan. Untuk mengetahui rata-rata hanya departemen yang menerima anggaran dan untuk menyertakan nilai anggaran dari tahun sebelumnya (gunakan previous_year
nilai , di mana current_year
adalah NULL
), gabungkan NULLIF
fungsi dan COALESCE
.
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
Berikut set hasilnya.
Average Budget
--------------
212500.000000
(1 row(s) affected)
B. Membandingkan NULLIF dan CASE
Untuk memperlihatkan kesamaan antara NULLIF
dan CASE
, kueri berikut mengevaluasi apakah nilai dalam MakeFlag
kolom dan FinishedGoodsFlag
sama. Kueri pertama menggunakan NULLIF
. Kueri kedua menggunakan CASE
ekspresi .
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: Mengembalikan jumlah anggaran yang tidak berisi data
Contoh berikut membuat budgets
tabel, memuat data, dan menggunakan NULLIF
untuk mengembalikan null jika current_year
null atau berisi data yang sama dengan previous_year
.
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;
Berikut set hasilnya.
dept LastBudget
---- -----------
1 100000.00
2 null
3 0.00
4 null
5 null
Lihat Juga
CASE (Transact-SQL)
desimal dan numerik (Transact-SQL)
Fungsi Sistem (Transact-SQL)