

 Amazon Redshift tidak akan lagi mendukung pembuatan Python UDFs baru mulai Patch 198. Python yang ada UDFs akan terus berfungsi hingga 30 Juni 2026. Untuk informasi lebih lanjut, lihat [posting blog](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/). 

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Fungsi NVL dan COALESCE
<a name="r_NVL_function"></a>

Mengembalikan nilai ekspresi pertama yang tidak null dalam serangkaian ekspresi. Ketika nilai non-null ditemukan, ekspresi yang tersisa dalam daftar tidak dievaluasi. 

NVL identik dengan COALESCE. Mereka adalah sinonim. Topik ini menjelaskan sintaks dan berisi contoh untuk keduanya.

## Sintaksis
<a name="r_NVL_function-synopsis"></a>

```
NVL( expression, expression, ... )
```

Sintaks untuk COALESCE adalah sama:

```
COALESCE( expression, expression, ... )
```

Jika semua ekspresi nol, 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.

## Pendapat
<a name="r_NVL_function-arguments"></a>

 *ekspresi*   
Ekspresi, seperti nama kolom, yang akan dievaluasi untuk status null.

## Jenis pengembalian
<a name="r_NVL_function-returntype"></a>

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
<a name="r_NVL_function-examples"></a>

Jika daftar berisi ekspresi integer, fungsi mengembalikan integer. 

```
SELECT COALESCE(NULL, 12, NULL);

coalesce
--------------
12
```

Contoh ini, yang sama dengan contoh sebelumnya, kecuali bahwa ia menggunakan NVL, 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 kolom START\$1DATE dan END\$1DATE, menyisipkan baris yang menyertakan nilai null, lalu menerapkan ekspresi NVL 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 ekspresi NVL adalah COALESCE. 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 ekspresi NVL untuk mengganti nol dengan beberapa nilai lainnya. Misalnya, fungsi agregat, seperti SUM, mengembalikan nilai null alih-alih nol ketika mereka tidak memiliki baris untuk dievaluasi. Anda dapat menggunakan ekspresi NVL untuk mengganti nilai null ini dengan. `700.0` Alih-alih`485`, 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
```