Hướng dẫn SQL này cung cấp giải thích, ví dụ cho hàm NVL2 trong Oracle
Hàm NVL2 là một hàm lồng nhau. Nó kiểm tra lần hiển thị đầu tiên, nếu lần hiển thị đầu tiên không rỗng, thì hàm NVL2 trả về biểu thức thứ hai. nếu lần hiển thị đầu tiên là null, thì nó sẽ trả về biểu thức thứ ba.
expr1 :nó là các giá trị nguồn hoặc biểu thức có thể chứa null. Bạn có thể cung cấp tên cột, chức năng trên tên cột
expr2 :Đây là giá trị của biểu thức được trả về nếu expr1 không phải là null
expr3 :Đây là giá trị của biểu thức được trả về nếu expr1 là null
Đối số expr1 có thể có bất kỳ kiểu dữ liệu nào. Các đối số expr2 và expr3 có thể có bất kỳ kiểu dữ liệu nào ngoại trừ LONG.
SQL> select nvl2(user_name,1,2) from apps.fnd_user where rownum < 5; NVL2(USER_NAME,1,2) ------------------- 1 1 1 1 SQL> select nvl2(end_date,1,2) from apps.fnd_user where rownum < 5; NVL2(END_DATE,1,2) ------------------ 1 2 1 1
Nếu kiểu dữ liệu của expr2 và expr3 khác nhau:
Nếu expr2 là dữ liệu ký tự, thì Cơ sở dữ liệu Oracle chuyển đổi expr3 thành kiểu dữ liệu của expr2 trước khi so sánh chúng trừ khi expr3 là hằng số null. Trong trường hợp đó, chuyển đổi kiểu dữ liệu là không cần thiết. Oracle trả về VARCHAR2 trong bộ ký tự của expr2.
Nếu expr2 là số, thì Oracle xác định đối số nào có ưu tiên số cao nhất, chuyển đổi hoàn toàn đối số khác thành kiểu dữ liệu đó và trả về kiểu dữ liệu đó.
Kiểu dữ liệu của kiểu trả về luôn giống với kiểu dữ liệu của expr2 trừ khi expr2 là dữ liệu ký tự, giá trị trả về trong trường hợp nào luôn là varchar2
SQL> select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5; select nvl2(end_date,1,'a') from apps.fnd_user where rownum < 5 * ERROR at line 1: ORA-01722: invalid number SQL> select nvl2(end_date,'a',1) from apps.fnd_user where rownum < 5; N - a 1 a a
Cách sử dụng
SELECT last_name, salary, NVL2(commission_pct, salary + (salary * commission_pct), salary) income FROM employees WHERE last_name like 'B%' ORDER BY last_name;
Các bài viết có liên quan
Các hàm hàng đơn trong Sql
Hàm NULLIF trong Oracle
Cập nhật câu lệnh trong oracle
Hàm Coalesce trong Oracle
Hàm LISTAGG Oracle
các hàm ngày oracle