NULLIF (SQL Transact)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
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 kedua nilai input sama. Kolom kedua mengembalikan nilai pertama (5) karena dua nilai input berbeda.
Sintaks
NULLIF ( expression , expression )
Argumen
ekspresi
Adalah ekspresi skalar yang valid.
Catatan
Untuk melihat sintaks transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Jenis Pengembalian
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 yang bergantung pada waktu, seperti RAND(), dalam fungsi NULLIF. Hal ini dapat menyebabkan fungsi dievaluasi dua kali dan mengembalikan hasil yang berbeda dari dua pemanggilan.
Contoh
A. Mengembalikan jumlah anggaran yang tidak berubah
Contoh berikut membuat budgets tabel untuk memperlihatkan 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 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 adalah tataan hasil.
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 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
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 adalah hasil yang ditetapkan.
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 (SQL T-SQL)
