sql >> Database teknologi >  >> RDS >> Oracle

NEXT_DAY() Funktion i Oracle

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:

  1. Oracle SQL-timers forskel mellem datoer i TT:MM:SS

  2. Hvordan IKKE REGEXP virker i MariaDB

  3. Hvordan filtrerede indekser kunne være en mere kraftfuld funktion

  4. SQL Server 2008 kan ikke logge på med nyoprettet bruger