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: