Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL 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.
Syntax
NULLIF ( expression , expression )
Arguments
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.
Remarks
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.
Examples
A. 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
KASUS (Transact-SQL)
desimal dan numerik (Transact-SQL)
Fungsi Sistem (Transact-SQL)