Oracle
 sql >> база данни >  >> RDS >> Oracle

Функция ADD_MONTHS() в Oracle

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

  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 с последователност и тригер не работи правилно

  2. Как да получа колона с първичен ключ в Oracle?

  3. Потребителско дефинирана рутина с DBMS_STATS, част II

  4. ORA-20001 в R12 Съберете статистически данни за схемата на 11g(FND_HISTOGRAM_COLS)

  5. Функция ROUND(дата) в Oracle