Hai ví dụ thực tế về chức năng NVL của Oracle

Trong bài viết này, tôi sẽ giải thích chức năng NVL của Oracle có chức năng gì và đưa ra một vài ví dụ về việc sử dụng nó.
Chức năng NVL
Trong Oracle, NVL
hàm cho phép bạn thay thế một NULL
giá trị bằng một giá trị khác.
Nó hữu ích khi bạn muốn lưu trữ thực tế là không có dữ liệu cho một cột cụ thể, nhưng bạn muốn hiển thị một cái gì đó khác.
Tôi sẽ chỉ cho bạn một vài ví dụ về điều này.
Ví dụ 1: Ngày kết thúc
Một khái niệm phổ biến trong các bảng cơ sở dữ liệu là lưu trữ ngày bắt đầu và ngày kết thúc cho một bản ghi, được sử dụng để theo dõi khi bản ghi có hiệu lực.
Trong một số trường hợp, ngày kết thúc được đặt thành NULL
nếu không có ngày kết thúc hoặc nếu đó là bản ghi đang hoạt động.
Hãy xem bảng này ở đây:
ID KHÁCH HÀNG | TÊN KHÁCH HÀNG | TRẠNG THÁI | START_DATE | NGÀY CUỐI |
1 | ABC | Tiềm năng | 1-Jan-17 | 10-01-17 |
2 | ABC | Đã ký | 11-1-17 | (vô giá trị) |
3 | DJ | Đã ký | 1-Jan-17 | (vô giá trị) |
4 | WXY | Trong tiến trình | 26-02-17 | (vô giá trị) |
5 | ĐÃ NUÔI | Đã ký | 21-12-17 | 3-Tháng Hai-17 |
6 | ĐÃ NUÔI | (vô giá trị) | 4-Tháng Hai-17 | 15-02-17 |
Chúng ta có thể thấy rằng có một vài hồ sơ cho khách hàng này. Ngày bắt đầu cho biết khi bản ghi đã bắt đầu và ngày kết thúc cho biết khi bản ghi đã kết thúc.
Bản ghi hoạt động là nơi có ngày kết thúc NULL
.
Chúng tôi có thể sử dụng một truy vấn như sau:
SELECT customer_id,
customer_name,
status,
start_date,
end_date
FROM customer_history;
Tuy nhiên, chúng tôi có thể không muốn hiển thị NULL
hoặc một giá trị trống trong hệ thống sử dụng dữ liệu này (tức là báo cáo hoặc trang web).
Vì vậy, chúng ta có thể sử dụng NVL
hàm. Trước tiên, chúng ta cần tìm ra giá trị mà chúng ta muốn hiển thị. Đây có thể là một ngày tĩnh (ví dụ: 31-DEC-9999).
Đây là một ví dụ sử dụng ngày tĩnh:
SELECT customer_id,
customer_name,
status,
start_date,
NVL(end_date, '31-DEC-9999')
FROM customer_history;
ID KHÁCH HÀNG | TÊN KHÁCH HÀNG | TRẠNG THÁI | START_DATE | NVL (END_DATE, '31 -DEC-9999 ') |
1 | ABC | Tiềm năng | 1-Jan-17 | 10-01-17 |
2 | ABC | Đã ký | 11-1-17 | 31-12-1999 |
3 | DJ | Đã ký | 1-Jan-17 | 31-12-1999 |
4 | WXY | Trong tiến trình | 26-02-17 | 31-12-1999 |
5 | ĐÃ NUÔI | Đã ký | 21-12-17 | 3-Tháng Hai-17 |
6 | ĐÃ NUÔI | (vô giá trị) | 4-Tháng Hai-17 | 15-02-17 |
Như bạn có thể thấy, hàm NVL có thể được sử dụng để dịch một giá trị ngày NULL sang một thứ khác.
2. Thiếu dữ liệu cần được phổ biến
Một ví dụ khác về việc sử dụng NVL
hàm là nơi bạn thiếu dữ liệu cho một cột mà bạn hoặc ứng dụng tin rằng phải có ở đó hoặc nếu bạn đang tải dữ liệu từ một bảng này sang một bảng khác và không thể sử dụng NULL
các giá trị vì lý do nào đó.
Giả sử chúng ta có cùng một bảng như trên.
Trong bảng này, chúng ta thấy thông tin về khách hàng. Tuy nhiên, giả sử rằng chúng tôi sử dụng điều này để điền vào một bảng khác trong một hệ thống khác hoặc một chế độ xem cụ thể hóa và cột trạng thái không được NULL
.
Quy tắc kinh doanh chỉ định rằng chúng tôi cần một giá trị cho trạng thái, nhưng chúng tôi không thể cập nhật bảng bên dưới.
Vì vậy, chúng ta có thể sử dụng NVL
hàm ở đây.
SELECT customer_id,
customer_name,
Nvl(status, 'Unknown') AS status,
start_date,
end_date
FROM customer_history;
ID KHÁCH HÀNG | TÊN KHÁCH HÀNG | TRẠNG THÁI | START_DATE | NGÀY CUỐI |
1 | ABC | Tiềm năng | 1-Jan-17 | 10-01-17 |
2 | ABC | Đã ký | 11-1-17 | (vô giá trị) |
3 | DJ | Đã ký | 1-Jan-17 | (vô giá trị) |
4 | WXY | Trong tiến trình | 26-02-17 | (vô giá trị) |
5 | ĐÃ NUÔI | Đã ký | 21-12-17 | 3-Tháng Hai-17 |
6 | ĐÃ NUÔI | không xác định | 4-Tháng Hai-17 | 15-02-17 |
Như bạn có thể thấy, truy vấn hiện hiển thị giá trị cho cột trạng thái, ngay cả khi giá trị ban đầu là NULL
. Điều này hiện đáp ứng quy tắc nghiệp vụ cho biết cột trạng thái không được để trống trong bảng mới của bạn.
Bây giờ bạn đã biết một vài ví dụ về cách sử dụng NVL
hàm trong Oracle.
Có thể bạn quan tâm
