Hướng dẫn SQL này cung cấp giải thích, ví dụ cho hàm NULLIF trong Oracle
Hàm NULLIF là một hàm rất hữu ích. Nó so sánh hai giá trị và trả về null nếu các giá trị giống nhau, nếu không trả về giá trị đầu tiên
expr1 :đó là các giá trị hoặc biểu thức nguồn sẽ được so sánh với expr2
expr2 :Nó cũng là giá trị nguồn được so sánh với expr1
Bạn không thể chỉ định chữ NULL cho giá trị đầu tiên
SQL> select nullif(NULL,1) from dual;
select nullif(NULL,1) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected - got CHAR
Cách sử dụng và ví dụ
SQL> select nullif(1,1) from dual; NULLIF(1,1)
----------- SQL> select nullif(1,2) from dual; NULLIF(1,2)
-----------
1
Lưu ý quan trọng
1) Câu lệnh này rất giống với câu lệnh trường hợp và nó tương đương với
CASE WHEN expr1 =expr2 THEN NULL ELSE expr1 END
2) Nếu cả hai đối số đều là kiểu dữ liệu số, thì Cơ sở dữ liệu Oracle xác định đối số có mức ưu tiên số cao hơn, 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 đó. Nếu các đối số không phải là số, thì chúng phải có cùng kiểu dữ liệu oracle, nếu không Oracle trả về lỗi.
SQL> select nullif(1,'apple') from dual;
select nullif(1,'apple') from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected NUMBER got CHARSQL> select nullif('apple',1) from dual;
select nullif('apple',1) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER
Ví dụ khác
select first_name, length(first_name),last_name, length(last_name), nullif(length(first_name),length(last_name)) from emp; SELECT NULLIF('Sunday', 'Friday') AS check FROM dual;
Một trường hợp sử dụng khác của hàm NULLIF sẽ là nếu bạn muốn liệt kê những nhân viên đã thay đổi công việc kể từ khi họ được thuê, như được chỉ ra bởi job_id trong bảng job_history khác với job_id hiện tại trong bảng nhân viên
select emp_name,nullif(b.job_id,a.job_id) old_job from employees a, job_history b where a.emp_id=b.emp_id;
Câu hỏi thường gặp về hàm Nullif
Cách tránh lỗi chia cho 0 với sự trợ giúp của hàm NULLIF
Chúng ta nhận được sai số chia cho 0 nếu mẫu số trong phép chia bằng không. Chúng ta có thể tránh bằng cách sử dụng hàm NULLIF như bên dưới
chọn 100 / nullif (0,0) từ kép;
Bây giờ ở đây vì cả hai giá trị đều bằng nhau, Nullif sẽ trả về null và toàn bộ biểu thức sẽ trả về null thay thế của bất kỳ lỗi nào. Đây là cách bạn có thể sử dụng khi xử lý cột thực
select col2 / nullif (col1,0) from exp;
Các bài viết có liên quan
Cập nhật câu lệnh trong oracle
hàm NVL2 trong Oracle
Hàm NVL trong Oracle
Hàm Coalesce trong Oracle
Các hàm một hàng trong sql
Xóa khỏi câu lệnh bảng trong Oracle
Tài nguyên bên ngoài
Tham chiếu Oracle cho NULLIF