Di SQL Server, COALESCE()
ekspresi mengembalikan argumen non-null pertamanya.
Cara kerjanya adalah, kami meneruskan daftar argumen ke ekspresi, mengevaluasi argumen secara berurutan dan mengembalikan nilai saat ini dari ekspresi pertama yang awalnya tidak mengevaluasi ke NULL
.
Sintaks
Sintaksnya seperti ini:
COALESCE ( expression [ ,...n ] )
Contoh
Berikut adalah contoh sederhana untuk ditunjukkan:
SELECT COALESCE(null, 'Cat', 'Dog');
Hasil:
Cat
Dalam hal ini, Cat
adalah argumen non-NULL pertama, jadi COALESCE()
mengembalikan nilai tersebut.
Ekspresi
Seperti disebutkan, COALESCE()
mengembalikan nilai saat ini dari ekspresi pertama yang awalnya tidak dievaluasi ke NULL
. Oleh karena itu, jika kita memberikan ekspresi seperti ini:
SELECT COALESCE( null, 2 * 3 );
Kami mendapatkan ini:
6
Fungsi mengembalikan tipe data ekspresi dengan prioritas tipe data tertinggi. Jika semua ekspresi tidak dapat dibatalkan, hasilnya akan diketik sebagai tidak dapat dibatalkan.
Ketika Semua Argumen NULL
Jika semua argumen adalah NULL
, COALESCE()
mengembalikan NULL
. Namun, setidaknya satu dari nilai nol harus diketik NULL
, jika tidak akan terjadi kesalahan.
Dengan kata lain, tidak semuanya bisa menjadi NULL
konstan:
SELECT COALESCE( null, null );
Kami mendapatkan ini:
Msg 4127, Level 16, State 1, Line 1 At least one of the arguments to COALESCE must be an expression that is not the NULL constant.
Dalam hal ini, semua argumen adalah NULL
konstan, dan kesalahan dikembalikan.
Di bawah ini adalah contoh database untuk mendemonstrasikan skenario di mana COALESCE()
mengembalikan NULL
ketika semua argumen adalah NULL
.
Misalkan kita menjalankan kueri berikut:
SELECT CustomerId, CustomerCategoryId
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Hasil:
CustomerId CustomerCategoryId ----------- ------------------ NULL NULL
Kedua kolom berisi NULL
nilai.
Jadi jika kita meneruskan kedua kolom ke COALESCE()
, kita mendapatkan hasil dari NULL
:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Hasil:
NULL
Hal yang sama berlaku jika kita mengganti salah satu kolom dengan NULL
konstan:
SELECT COALESCE( CustomerId, null )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Hasil:
NULL
Jadi hanya ketika semua argumennya adalah NULL
konstan sehingga kita mendapatkan kesalahan.
Ganti NULL
Hasil dengan Nilai yang Diketahui
Kami dapat menyertakan nilai yang diketahui sebagai argumen terakhir untuk mengganti hasil NULL apa pun dengan nilai yang diketahui itu.
Misalnya, kueri berikut mengembalikan NULL
:
SELECT SUM( UnitPrice )
FROM Sales.SpecialDeals;
Hasil:
NULL
Dalam hal ini, UnitPrice
kolom berisi nilai NULL di semua baris, dan hasilnya adalah NULL
.
Kita bisa menggunakan COALESCE()
seperti ini:
SELECT COALESCE( SUM( UnitPrice ), 0 )
FROM Sales.SpecialDeals;
Hasil:
0.00
Sekarang, hasil NULL diganti dengan nilai yang diketahui (nol).
COALESCE()
vs CASE
COALESCE()
ekspresi sebenarnya adalah pintasan sintaksis untuk CASE
ekspresi. Saat kita menggunakan COALESCE()
ekspresi, pengoptimal kueri menulis ulang sebagai CASE
ekspresi.
Ketika saya menjalankan pernyataan berikut:
SELECT COALESCE( CustomerId, CustomerCategoryId )
FROM Sales.SpecialDeals
WHERE SpecialDealId = 1;
Pengoptimal kueri menulis ulang sebagai berikut:
CASE
WHEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID] IS NOT NULL THEN [WideWorldImporters].[Sales].[SpecialDeals].[CustomerID]
ELSE [WideWorldImporters].[Sales].[SpecialDeals].[CustomerCategoryID]
END
COALESCE()
vs ISNULL()
Dalam beberapa hal, COALESCE()
ekspresinya mirip dengan ISNULL()
fungsi. Tapi ada perbedaan. Khususnya:
ISNULL()
adalah fungsi dan dievaluasi hanya sekali.COALESCE()
di sisi lain, adalah ekspresi, dan berpotensi dapat dievaluasi beberapa kali.- Penentuan tipe data dari ekspresi yang dihasilkan berbeda.
ISNULL
menggunakan tipe data parameter pertama,COALESCE
mengikutiCASE
aturan ekspresi dan mengembalikan tipe data nilai dengan prioritas tertinggi. - Kemampuan NULL dari ekspresi hasil berbeda untuk
ISNULL
danCOALESCE
.ISNULL
nilai kembalian selalu dianggap NOT NULLable (dengan asumsi nilai kembalian adalah non-nullable). Sebaliknya,COALESCE
dengan parameter non-null dianggapNULL
. - Validasi untuk
ISNULL
danCOALESCE
juga berbeda. Misalnya,NULL
nilai untukISNULL
diubah menjadiint
meskipun untukCOALESCE
, Anda harus memberikan tipe data. ISNULL
hanya membutuhkan dua parameter. SebaliknyaCOALESCE
mengambil sejumlah variabel parameter.
Informasi Lebih Lanjut
Lihat dokumentasi Microsoft untuk detail lebih lanjut dan contoh yang lebih kompleks.