Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hàm MONTHS_BETWEEN () trong Oracle

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+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:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách sao chép môi trường R12.2

  2. Oracle SQL &PL / SQL là gì? Mọi thứ một người mới bắt đầu cần biết

  3. vấn đề ORA-00001:ràng buộc duy nhất bị vi phạm trong INSERT / UPDATE

  4. Thay đổi bảng để sửa đổi giá trị mặc định của cột

  5. Sử dụng 'cột biểu thức chữ hoa chữ thường' trong mệnh đề where