В Oracle Database, ADD_MONTHS()
функцията добавя определен брой месеци към дата и връща резултата.
Синтаксис
Синтаксисът е така:
ADD_MONTHS(date, integer)
Където date
може да бъде стойност за дата и час или всяка стойност, която може да бъде имплицитно преобразувана в DATE
.
integer
Аргументът може да бъде цяло число или всяка стойност, която може да бъде имплицитно преобразувана в цяло число.
Типът на връщането винаги е DATE
, независимо от типа данни date
.
Пример
Ето един пример:
SELECT ADD_MONTHS(DATE '2020-01-01', 3)
FROM DUAL;
Резултат:
01/APR/20
Този пример показва датата въз основа на стойността на NLS_DATE_FORMAT
на моята система параметър (който в момента е DD/MON/RR
). Можем или да променим този параметър, или да използваме функция като TO_CHAR()
за да върнете резултата в различен формат.
Пример:
SELECT TO_CHAR(ADD_MONTHS(DATE '2020-01-01', 3), 'YYYY-MM-DD')
FROM DUAL;
Резултат:
2020-04-01
Извадете месеците
За да извадите месеците от дата, използвайте отрицателна стойност за втория аргумент.
Пример:
SELECT ADD_MONTHS(DATE '2020-01-01', -3)
FROM DUAL;
Резултат:
01/OCT/19
Предаване на различни формати за дата
Датата може да бъде предоставена в различни формати, стига да се разреши до дата:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Резултат:
01/APR/20
Но преминаването на такъв, който не може да бъде разрешен, води до грешка:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Резултат:
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
Това обаче може да зависи от стойността на NLS_DATE_FORMAT
параметър. Ако променим този параметър:
ALTER SESSION SET NLS_DATE_FORMAT = "Mon DD RR";
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';
Резултат:
VALUE ____________ Mon DD RR
След това изпълнете заявката отново:
SELECT ADD_MONTHS('Jan 01 2020', 3)
FROM DUAL;
Резултат:
Apr 01 20
Вече не получаваме грешката.
Нулеви аргументи
Подаване на дата от null
връща null
:
SET NULL 'null';
SELECT ADD_MONTHS(null, 1)
FROM DUAL;
Резултат:
null
Но предаването на null за втория аргумент води до грешка:
SELECT ADD_MONTHS('2020-01-01', null)
FROM DUAL;
Резултат:
Error starting at line : 1 in command - SELECT ADD_MONTHS('2020-01-01', null) FROM DUAL Error report - ORA-01843: not a valid month
Имайте предвид, че по подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null
възниква в резултат на SQL SELECT
изявление.
Можете обаче да използвате SET NULL
за да посочите различен низ, който да бъде върнат. В примера по-горе посочих, че низът null
трябва да бъдат върнати.
Невалиден брой аргументи
Предаването на невалиден брой аргументи води до грешка:
SELECT ADD_MONTHS(3)
FROM DUAL;
Резултат:
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: