I Oracle Database, NEXT_DAY()
funktion returnerar datumet för den första instansen av den angivna veckodagen som är senare än det angivna datumet.
Syntax
Syntaxen ser ut så här:
NEXT_DAY(date, char)
Där date
är datumet och char
är den angivna veckodagen.
char
argumentet måste vara en veckodag på datumspråket för den aktuella sessionen, antingen det fullständiga namnet eller förkortningen. Det minsta antalet bokstäver som krävs är antalet bokstäver i den förkortade versionen. Alla tecken omedelbart efter den giltiga förkortningen ignoreras.
Exempel
Här är ett exempel:
SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;
Resultat:
Next Friday ______________ 05-OCT-35
Vardagsförkortningar
I exemplet ovan används hela veckodagsnamnet. I följande exempel använder jag istället förkortningen:
SELECT NEXT_DAY('01-OCT-2035', 'FRI') AS "Next Friday"
FROM DUAL;
Resultat:
Next Friday ______________ 05-OCT-35
Hur som helst är resultatet detsamma.
Faktum är att så länge som den första delen av argumentet innehåller en giltig veckodagsförkortning, kommer funktionen att returnera datumet för följande veckodag som matchar den förkortningen. Alla tecken omedelbart efter den giltiga förkortningen ignoreras. Så även om hela argumentet faktiskt inte är ett giltigt veckodagsnamn, så länge som den första delen är en giltig veckodagsförkortning, kommer det att returnera ett resultat för den veckodagen.
Exempel:
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;
Resultat:
Next Monkey Next Thumbnail Next Friar Tuck ______________ _________________ __________________ 08-OCT-35 04-OCT-35 05-OCT-35
Språkinställningar
Som nämnts måste veckodagen eller dess förkortning vara en veckodag på datumspråket för den aktuella sessionen.
Det här är vad som händer när jag ändrar min sessions språk och sedan försöker köra samma exempel igen:
ALTER SESSION SET NLS_LANGUAGE = 'Spanish';
SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;
Resultat:
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
I det här fallet är mitt språk spanska, så vi måste tillhandahålla veckodagen på spanska:
ALTER SESSION SET NLS_LANGUAGE = 'Spanish';
SELECT NEXT_DAY('01-OCT-2035', 'viernes') AS "Next Friday"
FROM DUAL;
Resultat:
Next Friday ______________ 05-OCT-35
Nollargument
Om något av argumenten är null
, resultatet är 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;
Resultat:
1 2 _______ _______ null null
Som standard returnerar SQLcl och SQL*Plus ett tomt utrymme när null
uppstår som ett resultat av en SQL SELECT
påstående.
Du kan dock använda SET NULL
för att ange en annan sträng som ska returneras. Här specificerade jag att strängen null
bör returneras.
Argument saknas
Ringer NEXT_DAY()
med fel antal argument, eller utan att skicka några argument, resulterar i ett fel:
SELECT NEXT_DAY()
FROM DUAL;
Resultat:
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: