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

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

В Oracle Database, NEXT_DAY() функцията връща датата на първия екземпляр на посочения делничен ден, който е по-късен от посочената дата.

Синтаксис

Синтаксисът е така:

NEXT_DAY(date, char)

Където date е датата и char е посоченият делничен ден.

Знакът char аргументът трябва да бъде ден от седмицата на езика на датата на текущата сесия, или пълното име, или съкращението. Минималният брой необходими букви е броят на буквите в съкратената версия. Всички знаци непосредствено след валидното съкращение се игнорират.

Пример

Ето един пример:

SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;

Резултат:

   Next Friday 
______________ 
05-OCT-35     

Съкращения от делнични дни

Горният пример използва пълното име на ден от седмицата. В следния пример вместо това използвам съкращението:

SELECT NEXT_DAY('01-OCT-2035', 'FRI') AS "Next Friday"
FROM DUAL;

Резултат:

   Next Friday 
______________ 
05-OCT-35     

Така или иначе резултатът е същият.

Всъщност, докато първата част на аргумента съдържа валидно съкращение за делничен ден, функцията ще върне датата на следващия делничен ден, която съответства на това съкращение. Всички знаци непосредствено след валидното съкращение се игнорират. Така че, дори ако целият аргумент всъщност не е валидно име на делничен ден, стига първата част да е валидно съкращение за делничен ден, той ще върне резултат за този делничен ден.

Примери:

SELECT 
    NEXT_DAY('01-OCT-2035','Monkey') AS "Next Monkey",
    NEXT_DAY('01-OCT-2035','Thumbnail') AS "Next Thumbnail",
    NEXT_DAY('01-OCT-2035','Friar Tuck') AS "Next Friar Tuck"
FROM DUAL;

Резултат:

   Next Monkey    Next Thumbnail    Next Friar Tuck 
______________ _________________ __________________ 
08-OCT-35      04-OCT-35         05-OCT-35         

Езикови настройки

Както споменахме, денят от седмицата или неговото съкращение трябва да е ден от седмицата на езика на датата на текущата сесия.

Ето какво се случва, когато сменя езика на сесията си, след което се опитам да стартирам същия пример отново:

ALTER SESSION SET NLS_LANGUAGE = 'Spanish';

SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;

Резултат:

Session alterado.


Error que empieza en la línea: 1 del comando :
SELECT NEXT_DAY('01-OCT-2035','FRIDAY') AS "Next Friday"
FROM DUAL
Informe de error -
ORA-01846: día de la semana no válido

В този случай моят език е испански и затова ще трябва да предоставим делника на испански:

ALTER SESSION SET NLS_LANGUAGE = 'Spanish';

SELECT NEXT_DAY('01-OCT-2035', 'viernes') AS "Next Friday"
FROM DUAL;

Резултат:

   Next Friday 
______________ 
05-OCT-35     

Нулеви аргументи

Ако някой от аргументите е null , резултатът е null :

ALTER SESSION SET NLS_LANGUAGE = 'AMERICAN';
SET NULL 'null';

SELECT
    NEXT_DAY(null, 'FRIDAY') AS "1",
    NEXT_DAY('01-OCT-2035', null) AS "2"
FROM DUAL;

Резултат:

      1       2 
_______ _______ 
null    null   

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Липсващ аргумент

Извикване на NEXT_DAY() с грешен брой аргументи или без подаване на аргументи, води до грешка:

SELECT NEXT_DAY()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT NEXT_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:Актуализиране на колона на таблица с помощта на ROWNUM във връзка с клауза ORDER BY

  2. създайте персонализирана функция за разлика в датите, с изключение на почивните дни и празниците в oracle sql

  3. Вмъкване на блоб в базата данни на Oracle с C#

  4. Как да извика съхранена процедура на Oracle, която включва дефиниран от потребителя тип в java?

  5. ATAN() Функция в Oracle