I Oracle Database er NEXT_DAY()
funktion returnerer datoen for den første forekomst af den angivne ugedag, der er senere end den angivne dato.
Syntaks
Syntaksen ser sådan ud:
NEXT_DAY(date, char)
Hvor date
er datoen og char
er den angivne hverdag.
char
argument skal være en dag i ugen på datosproget for den aktuelle session, enten det fulde navn eller forkortelsen. Det mindste antal bogstaver, der kræves, er antallet af bogstaver i den forkortede version. Eventuelle tegn umiddelbart efter den gyldige forkortelse ignoreres.
Eksempel
Her er et eksempel:
SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;
Resultat:
Next Friday ______________ 05-OCT-35
Ugedagsforkortelser
Ovenstående eksempel bruger det fulde navn på ugedagen. I det følgende eksempel bruger jeg i stedet forkortelsen:
SELECT NEXT_DAY('01-OCT-2035', 'FRI') AS "Next Friday"
FROM DUAL;
Resultat:
Next Friday ______________ 05-OCT-35
Uanset hvad, er resultatet det samme.
Faktisk, så længe den første del af argumentet indeholder en gyldig hverdagsforkortelse, vil funktionen returnere datoen for den følgende ugedag, der matcher denne forkortelse. Eventuelle tegn umiddelbart efter den gyldige forkortelse ignoreres. Så selvom hele argumentet faktisk ikke er et gyldigt ugedagsnavn, så længe den første del er en gyldig hverdagsforkortelse, vil det returnere et resultat for den pågældende ugedag.
Eksempler:
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
Sprogindstillinger
Som nævnt skal ugedagen eller dens forkortelse være en dag i ugen på datosproget for den aktuelle session.
Her er, hvad der sker, når jeg ændrer min sessions sprog og derefter prøver at køre det samme eksempel 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 dette tilfælde er mit sprog spansk, og derfor skal vi angive ugedagen på spansk:
ALTER SESSION SET NLS_LANGUAGE = 'Spanish';
SELECT NEXT_DAY('01-OCT-2035', 'viernes') AS "Next Friday"
FROM DUAL;
Resultat:
Next Friday ______________ 05-OCT-35
Nul-argumenter
Hvis et af argumenterne er null
, resultatet er 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 returnerer SQLcl og SQL*Plus et tomt mellemrum, når null
opstår som et resultat af en SQL SELECT
udmelding.
Du kan dog bruge SET NULL
for at angive en anden streng, der skal returneres. Her specificerede jeg, at strengen null
skal returneres.
Manglende argument
Kalder NEXT_DAY()
med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:
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: