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