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

Hàm LAST_DAY () trong Oracle

Trong Cơ sở dữ liệu Oracle, LAST_DAY() hàm trả về ngày cuối cùng của tháng có chứa ngày được cung cấp.

Nó chấp nhận một đối số, là ngày mà bạn muốn tìm ngày cuối cùng của tháng.

Cú pháp

Cú pháp như sau:

LAST_DAY(date)

Nơi date là biểu thức ngày mà bạn muốn tìm ngày cuối cùng của tháng.

Ví dụ

Đây là một ví dụ:

SELECT LAST_DAY(DATE '2030-02-01')
FROM DUAL;

Kết quả:

28-FEB-30

Trong trường hợp này, chúng tôi đang sử dụng một ngày trong tháng Hai. Hóa ra, tháng Hai có 28 ngày trong năm đó.

Đây là những gì sẽ xảy ra nếu chúng ta tăng ngày này sang năm nhuận tiếp theo:

SELECT LAST_DAY(DATE '2032-02-01')
FROM DUAL;

Kết quả:

29-FEB-32

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.

Ngoài ra, ngày được trả về ở định dạng được chỉ định cho phiên của bạn. Trong ví dụ này, phiên của tôi đang sử dụng định dạng mặc định cho khi NLS_TERRITORY tham số được đặt thành AMERICA . Bạn luôn có thể thay đổi định dạng ngày giờ của phiên nếu muốn.

Các giá trị ngày giờ khác

Nó cũng hoạt động với các giá trị ngày giờ khác, chẳng hạn như TIMESTAMP , v.v.:

SELECT LAST_DAY(TIMESTAMP '2030-02-01 10:30:45.34567')
FROM DUAL;

Kết quả:

28-FEB-30

Tuy nhiên, kiểu trả về luôn là DATE , bất kể kiểu dữ liệu của đối số.

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 LAST_DAY(DATE '0000-00-00')
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT LAST_DAY(DATE '0000-00-00')
FROM DUAL
Error at Command Line : 1 Column : 22
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 .

Ngày hiện tại

Chúng tôi có thể vượt qua SYSDATE làm đối số datetime để sử dụng ngày hiện tại:

SELECT 
    SYSDATE,
    LAST_DAY(SYSDATE)
FROM DUAL;

Kết quả:

     SYSDATE    LAST_DAY(SYSDATE) 
____________ ____________________ 
12-AUG-21    31-AUG-21           

Thiếu đối số

Đang gọi LAST_DAY() 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 LAST_DAY()
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT LAST_DAY()
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. Oracle:Nhập tệp CSV

  2. Sử dụng Oracle JDeveloper 12c với Cơ sở dữ liệu Oracle 12c trên Nền tảng đám mây Oracle, Phần 1

  3. ORA-04021:xảy ra thời gian chờ trong khi chờ khóa đối tượng

  4. Tạo trình kích hoạt để chỉ chạy khi một bảng mới đang được tạo

  5. JDBC ResultSet lấy các cột có bí danh bảng