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

Hàm ADD_MONTHS () trong Oracle

Trong Cơ sở dữ liệu Oracle, ADD_MONTHS() hàm thêm một số tháng nhất định vào một ngày và trả về kết quả.

Cú pháp

Cú pháp như sau:

ADD_MONTHS(date, integer)

date có thể là giá trị ngày giờ hoặc bất kỳ giá trị nào có thể được chuyển đổi hoàn toàn thành DATE .

Số nguyên integer đối số có thể là một số nguyên hoặc bất kỳ giá trị nào có thể được chuyển đổi hoàn toàn thành một số nguyên.

Loại trả về luôn là DATE , bất kể loại dữ liệu của date .

Ví dụ

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

SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;

Kết quả:

01/APR/20

Ví dụ này hiển thị ngày dựa trên giá trị của NLS_DATE_FORMAT trong hệ thống của tôi tham số (hiện là DD/MON/RR ). Chúng ta có thể thay đổi tham số này hoặc sử dụng một hàm như TO_CHAR() để trả về kết quả ở một định dạng khác.

Ví dụ:

SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;

Kết quả:

2020-04-01

Trừ các tháng

Để trừ các tháng cho một ngày, hãy sử dụng giá trị âm cho đối số thứ hai.

Ví dụ:

SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;

Kết quả:

01/OCT/19

Chuyển nhiều định dạng ngày khác nhau

Ngày có thể được cung cấp ở nhiều định dạng khác nhau, miễn là nó chuyển thành một ngày:

SELECT ADD_MONTHS('01 Jan 2020', 3)
FROM DUAL;

Kết quả:

01/APR/20

Nhưng việc vượt qua một cái mà không thể giải quyết được dẫn đến lỗi:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL
Error report -
ORA-01858: a non-numeric character was found where a numeric was expected

Tuy nhiên, điều này có thể phụ thuộc vào giá trị của NLS_DATE_FORMAT tham số. Nếu chúng tôi thay đổi tham số này:

ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

Kết quả:

       VALUE 
____________ 
Mon DD RR   

Và sau đó chạy lại truy vấn:

SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;

Kết quả:

Apr 01 20

Chúng tôi không còn gặp lỗi nữa.

Đối số rỗng

Chuyển ngày null trả về null :

SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;

Kết quả:

null

Nhưng việc chuyển null cho đối số thứ hai dẫn đến lỗi:

SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL
Error report -
ORA-01843: not a valid month

Lưu ý rằng theo mặc định, SQLcl và SQL * Plus trả về một khoảng trống bất cứ khi nào null xảy ra do một SELECT trong SQL tuyên bố.

Tuy nhiên, bạn có thể sử dụng SET NULL để chỉ định một chuỗi khác được trả về. Trong ví dụ trên, tôi đã chỉ định rằng chuỗi null nên được trả lại.

Số lượng đối số không hợp lệ

Việc chuyển một số lượng đối số không hợp lệ dẫn đến lỗi:

SELECT ADD_MONTHS(3)
FROM DUAL;

Kết quả:

Error starting at line : 1 in command -
SELECT ADD_MONTHS(3)
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. Trình điều khiển Oracle ODBC của bạn tải ứng dụng khách Oracle như thế nào?

  2. Chia địa chỉ IPv4 thành 4 số trong Oracle sql

  3. Sự khác biệt giữa các dấu thời gian tính bằng mili giây trong Oracle

  4. Trả về kết quả ngay cả cho các phần tử trong danh sách IN không tồn tại trong bảng

  5. Memberhip.ValidateUser luôn trả về false sau khi nâng cấp lên VS 2010 / .NET 4.0