In Oracle Database, de NEXT_DAY()
functie retourneert de datum van de eerste instantie van de opgegeven weekdag die later is dan de opgegeven datum.
Syntaxis
De syntaxis gaat als volgt:
NEXT_DAY(date, char)
Waar date
is de datum en char
is de opgegeven weekdag.
Het char
argument moet een dag van de week zijn in de datumtaal van de huidige sessie, ofwel de volledige naam of de afkorting. Het minimaal vereiste aantal letters is het aantal letters in de verkorte versie. Alle tekens die direct na de geldige afkorting volgen, worden genegeerd.
Voorbeeld
Hier is een voorbeeld:
SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;
Resultaat:
Next Friday ______________ 05-OCT-35
Weekdagafkortingen
In het bovenstaande voorbeeld wordt de volledige naam van de weekdag gebruikt. In het volgende voorbeeld gebruik ik in plaats daarvan de afkorting:
SELECT NEXT_DAY('01-OCT-2035', 'FRI') AS "Next Friday"
FROM DUAL;
Resultaat:
Next Friday ______________ 05-OCT-35
Het resultaat is hoe dan ook hetzelfde.
Zolang het eerste deel van het argument een geldige weekdagafkorting bevat, retourneert de functie de datum van de volgende weekdag die overeenkomt met die afkorting. Tekens die direct na de geldige afkorting volgen, worden genegeerd. Dus zelfs als het hele argument niet echt een geldige weekdagnaam is, levert het een resultaat voor die weekdag op, zolang het eerste deel een geldige weekdagafkorting is.
Voorbeelden:
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;
Resultaat:
Next Monkey Next Thumbnail Next Friar Tuck ______________ _________________ __________________ 08-OCT-35 04-OCT-35 05-OCT-35
Taalinstellingen
Zoals vermeld, moet de weekdag of de afkorting ervan een dag van de week zijn in de datumtaal van de huidige sessie.
Dit is wat er gebeurt als ik de taal van mijn sessie verander en vervolgens hetzelfde voorbeeld opnieuw probeer uit te voeren:
ALTER SESSION SET NLS_LANGUAGE = 'Spanish';
SELECT NEXT_DAY('01-OCT-2035', 'FRIDAY') AS "Next Friday"
FROM DUAL;
Resultaat:
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
In dit geval is mijn taal Spaans, en dus moeten we de weekdag in het Spaans geven:
ALTER SESSION SET NLS_LANGUAGE = 'Spanish';
SELECT NEXT_DAY('01-OCT-2035', 'viernes') AS "Next Friday"
FROM DUAL;
Resultaat:
Next Friday ______________ 05-OCT-35
Nullargumenten
Als een van beide argumenten null
is , het resultaat is 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;
Resultaat:
1 2 _______ _______ null null
Standaard retourneren SQLcl en SQL*Plus een spatie wanneer null
treedt op als resultaat van een SQL SELECT
uitspraak.
U kunt echter SET NULL
. gebruiken om een andere tekenreeks op te geven die moet worden geretourneerd. Hier heb ik gespecificeerd dat de string null
moet worden geretourneerd.
Ontbrekend argument
Bellen NEXT_DAY()
met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:
SELECT NEXT_DAY()
FROM DUAL;
Resultaat:
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: