Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
NVLdan COALESCE fungsi
Mengembalikan nilai ekspresi pertama yang tidak null dalam serangkaian ekspresi. Ketika nilai non-null ditemukan, ekspresi yang tersisa dalam daftar tidak dievaluasi.
NVLidentik denganCOALESCE. Mereka adalah sinonim. Topik ini menjelaskan sintaks dan berisi contoh untuk keduanya.
Sintaks
NVL( expression, expression, ... )
Sintaks untuk COALESCE adalah sama:
COALESCE( expression, expression, ... )
Jika semua ekspresi adalah null, hasilnya adalah null.
Fungsi-fungsi ini berguna ketika Anda ingin mengembalikan nilai sekunder ketika nilai primer hilang atau null. Misalnya, kueri mungkin mengembalikan yang pertama dari tiga nomor telepon yang tersedia: ponsel, rumah, atau kantor. Urutan ekspresi dalam fungsi menentukan urutan evaluasi.
Argumen
- ekspresi
-
Ekspresi, seperti nama kolom, yang akan dievaluasi untuk status null.
Jenis pengembalian
Amazon Redshift menentukan tipe data dari nilai yang dikembalikan berdasarkan ekspresi input. Jika tipe data dari ekspresi input tidak memiliki tipe umum, maka kesalahan dikembalikan.
Contoh
Jika daftar berisi ekspresi integer, fungsi mengembalikan integer.
SELECT COALESCE(NULL, 12, NULL);
coalesce -------------- 12
Contoh ini, yang sama dengan contoh sebelumnya, kecuali yang digunakannyaNVL, mengembalikan hasil yang sama.
SELECT NVL(NULL, 12, NULL);
coalesce -------------- 12
Contoh berikut mengembalikan tipe string.
SELECT COALESCE(NULL, 'Amazon Redshift', NULL);
coalesce -------------- Amazon Redshift
Contoh berikut menghasilkan kesalahan karena tipe data bervariasi dalam daftar ekspresi. Dalam hal ini, ada tipe string dan tipe angka dalam daftar.
SELECT COALESCE(NULL, 'Amazon Redshift', 12);
ERROR: invalid input syntax for integer: "Amazon Redshift"
Untuk contoh ini, Anda membuat tabel dengan START _ DATE dan END _ DATE kolom, menyisipkan baris yang menyertakan nilai nol, lalu menerapkan NVL ekspresi ke dua kolom.
create table datetable (start_date date, end_date date); insert into datetable values ('2008-06-01','2008-12-31'); insert into datetable values (null,'2008-12-31'); insert into datetable values ('2008-12-31',null);
select nvl(start_date, end_date) from datetable order by 1;
coalesce ------------ 2008-06-01 2008-12-31 2008-12-31
Nama kolom default untuk NVL ekspresi adalahCOALESCE. Query berikut mengembalikan hasil yang sama:
select coalesce(start_date, end_date) from datetable order by 1;
Untuk contoh kueri berikut, Anda membuat tabel dengan contoh informasi pemesanan hotel dan menyisipkan beberapa baris. Beberapa catatan berisi nilai nol.
create table booking_info (booking_id int, booking_code character(8), check_in date, check_out date, funds_collected numeric(12,2));
Masukkan data sampel berikut. Beberapa catatan tidak memiliki check_out
tanggal atau funds_collected
jumlah.
insert into booking_info values (1, 'OCEAN_WV', '2023-02-01','2023-02-03',100.00); insert into booking_info values (2, 'OCEAN_WV', '2023-04-22','2023-04-26',120.00); insert into booking_info values (3, 'DSRT_SUN', '2023-03-13','2023-03-16',125.00); insert into booking_info values (4, 'DSRT_SUN', '2023-06-01','2023-06-03',140.00); insert into booking_info values (5, 'DSRT_SUN', '2023-07-10',null,null); insert into booking_info values (6, 'OCEAN_WV', '2023-08-15',null,null);
Query berikut mengembalikan daftar tanggal. Jika check_out
tanggal tidak tersedia, itu mencantumkan check_in
tanggal.
select coalesce(check_out, check_in) from booking_info order by booking_id;
Hasilnya adalah sebagai berikut. Perhatikan bahwa dua catatan terakhir menunjukkan check_in
tanggal.
coalesce ------------ 2023-02-03 2023-04-26 2023-03-16 2023-06-03 2023-07-10 2023-08-15
Jika Anda mengharapkan kueri untuk mengembalikan nilai null untuk fungsi atau kolom tertentu, Anda dapat menggunakan NVL ekspresi untuk mengganti nol dengan beberapa nilai lainnya. Misalnya, fungsi agregat, sepertiSUM, mengembalikan nilai null alih-alih nol ketika mereka tidak memiliki baris untuk dievaluasi. Anda dapat menggunakan NVL ekspresi untuk mengganti nilai null ini dengan700.0
. Alih-alih485
, hasil penjumlahan funds_collected
adalah 1885
karena dua baris yang memiliki null diganti dengan. 700
select sum(nvl(funds_collected, 700.0)) as sumresult from booking_info;
sumresult ------ 1885