Trong Cơ sở dữ liệu Oracle, COALESCE()
hàm trả về biểu thức không rỗng đầu tiên trong danh sách biểu thức.
Cú pháp
Cú pháp như sau:
COALESCE(expr [, expr ]...)
Ít nhất hai biểu thức phải được chuyển.
Ví dụ
Dưới đây là một ví dụ để chứng minh:
SELECT COALESCE(null, 7)
FROM DUAL;
Kết quả:
7
Dưới đây là một số ví dụ khác:
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
Kết quả:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Chúng ta có thể thấy rằng COALESCE()
trả về null
khi tất cả các đối số đều rỗng.
Về dòng đầu tiên SET NULL 'null';
, Tôi đã thêm điều đó để phiên SQLcl của tôi trả về null
bất cứ khi nào kết quả là null.
Theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null
xảy ra do một SELECT
trong SQL tuyên bố.
Tuy nhiên, bạn có thể sử dụng SET NULL
để chỉ định một chuỗi khác được trả về. Ở đây tôi đã chỉ định rằng chuỗi null
nên được trả lại.
Ví dụ về cơ sở dữ liệu
Giả sử chúng ta chạy truy vấn sau:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Kết quả:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
Chúng ta có thể thấy rằng một số hàng null
trong STATE_PROVINCE
cột.
Đây là truy vấn lại, ngoại trừ lần này chúng tôi sử dụng COALESCE()
chống lại STATE_PROVINCE
cột:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Kết quả:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Vì vậy, chúng tôi đã sử dụng COALESCE()
để trả về N/A
bất cứ khi nào giá trị null xảy ra.
COALESCE()
so với CASE
Sau đây:
COALESCE(expr1, expr2)
Tương đương với cái này:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Số lượng đối số không hợp lệ
Việc gọi hàm mà không chuyển bất kỳ đối số nào dẫn đến lỗi:
SELECT COALESCE()
FROM DUAL;
Kết quả:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"