sql >> Database >  >> RDS >> Oracle

NEXT_DAY() Functie in Oracle

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:

  1. Python/postgres/psycopg2:ID van zojuist ingevoegde rij ophalen

  2. Amazon RDS Point-in-Time Recovery vergelijken met ClusterControl

  3. Verschillende abonnementen voor identieke servers

  4. Hoe MySQL 5.5 naar 5.6 te upgraden op Ubuntu 14.04