Trong Cơ sở dữ liệu Oracle, MONTHS_BETWEEN()
hàm trả về số tháng giữa hai ngày.
Cú pháp
Cú pháp như sau:
MONTHS_BETWEEN(date1, date2)
Ví dụ
Đây là một ví dụ:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-10')
FROM DUAL;
Kết quả:
4
Trong trường hợp này, có chính xác bốn tháng giữa hai ngày.
Tháng và ngày cuối cùng của tháng được xác định bởi tham số phiên NLS_CALENDAR
. Xem Cách Kiểm tra Giá trị của Tham số NLS để tìm hiểu phiên của bạn đang sử dụng lịch nào. Của tôi đang sử dụng lịch Gregorian.
Tháng phân số
Hàm cho phép các tháng phân số. Nếu hai ngày bao gồm các phần ngày khác nhau, thì Cơ sở dữ liệu Oracle sẽ tìm ra thành phần phân số thích hợp để sử dụng.
Ví dụ:
SELECT MONTHS_BETWEEN(DATE '2030-06-10', DATE '2030-02-25')
FROM DUAL;
Kết quả:
3.51612903225806451612903225806451612903
Tháng âm
Nếu ngày thứ hai muộn hơn ngày đầu tiên, thì số tiền âm sẽ được trả lại:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '2030-06-10')
FROM DUAL;
Kết quả:
-4
Các ngày ngoài phạm vi
Các ngày bằng không và các ngày khác ngoài phạm vi dẫn đến lỗi.
Ví dụ:
SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00')
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN(DATE '2030-02-10', DATE '0000-00-00') FROM DUAL Error at Command Line : 1 Column : 47 Error report - SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0 01841. 00000 - "(full) year must be between -4713 and +9999, and not be 0" *Cause: Illegal year entered *Action: Input year in the specified range
Như thông báo lỗi nêu rõ, năm (đầy đủ) phải nằm trong khoảng -4713
và +9999
và không phải là 0
.
So sánh Ngày với Ngày hiện tại
Chúng tôi có thể vượt qua SYSDATE
làm đối số datetime để so sánh một ngày với ngày hiện tại:
SELECT
SYSDATE,
MONTHS_BETWEEN(SYSDATE, DATE '2030-03-01')
FROM DUAL;
Kết quả:
SYSDATE MONTHS_BETWEEN(SYSDATE,DATE'2030-03-01') ____________ ____________________________________________ 13/AUG/21 -102.587825194145758661887694145758661888
Thiếu đối số
Đang gọi MONTHS_BETWEEN()
với số lượng đối số sai hoặc không chuyển bất kỳ đối số nào, dẫn đến lỗi:
SELECT MONTHS_BETWEEN()
FROM DUAL;
Kết quả:
Error starting at line : 1 in command - SELECT MONTHS_BETWEEN() FROM DUAL Error at Command Line : 1 Column : 8 Error report - SQL Error: ORA-00909: invalid number of arguments 00909. 00000 - "invalid number of arguments" *Cause: *Action: