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

LAST_DAY() Funktion i Oracle

I Oracle Database er LAST_DAY() funktion returnerer den sidste dag i måneden, der indeholder den angivne dato.

Den accepterer ét argument, som er den dato, du ønsker at finde den sidste dag i måneden.

Syntaks

Syntaksen ser sådan ud:

LAST_DAY(date)

Hvor date er det datoudtryk, som du vil finde den sidste dag i måneden.

Eksempel

Her er et eksempel:

SELECT LAST_DAY(DATE '2030-02-01')
FROM DUAL;

Resultat:

28-FEB-30

I dette tilfælde bruger vi en dato i februar. Som det viser sig, har februar 28 dage i det år.

Her er, hvad der sker, hvis vi øger datoen til det næste skudår:

SELECT LAST_DAY(DATE '2032-02-01')
FROM DUAL;

Resultat:

29-FEB-32

Den sidste dag i måneden er defineret af sessionsparameteren NLS_CALENDAR . Se, hvordan du tjekker værdierne af NLS-parametrene for at finde ud af, hvilken kalender din session bruger. Min bruger den gregorianske kalender.

Også datoen returneres i det format, der er angivet for din session. I dette eksempel bruger min session standardformatet for, når NLS_TERRITORY parameter er indstillet til AMERICA . Du kan altid ændre din sessions dato- og tidsformater, hvis du ønsker det.

Andre dato-tidsværdier

Det fungerer også sammen med andre dato-tidsværdier, såsom TIMESTAMP osv.:

SELECT LAST_DAY(TIMESTAMP '2030-02-01 10:30:45.34567')
FROM DUAL;

Resultat:

28-FEB-30

Returtypen er dog altid DATE , uanset argumentets datatype.

Datoer uden for rækkevidde

Nuldatoer og andre datoer uden for intervallet resulterer i en fejl.

Eksempel:

SELECT LAST_DAY(DATE '0000-00-00')
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT LAST_DAY(DATE '0000-00-00')
FROM DUAL
Error at Command Line : 1 Column : 22
Error report -
SQL Error: ORA-01841: (full) year must be between -4713 and +9999, and not be 0
01841. 00000 -  "(full) year must be between -4713 and +9999, and not be 0"
*Cause:    Illegal year entered
*Action:   Input year in the specified range

Som fejlmeddelelsen angiver, skal (hele) året være mellem -4713 og +9999 , og ikke være 0 .

Aktuel dato

Vi kan sende SYSDATE som datetime-argument for at bruge den aktuelle dato:

SELECT 
    SYSDATE,
    LAST_DAY(SYSDATE)
FROM DUAL;

Resultat:

     SYSDATE    LAST_DAY(SYSDATE) 
____________ ____________________ 
12-AUG-21    31-AUG-21           

Manglende argument

Kalder LAST_DAY() med det forkerte antal argumenter, eller uden at sende nogen argumenter, resulterer det i en fejl:

SELECT LAST_DAY()
FROM DUAL;

Resultat:

Error starting at line : 1 in command -
SELECT LAST_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. Sådan eksporteres Oracle-forespørgselsresultater til en JSON-fil, når du bruger SQLcl

  2. Sådan vælger du et bestemt antal tegn fra venstre eller højre for en streng i SQL Server

  3. postgresql COUNT(DISTINCT ...) meget langsom

  4. Sådan køres Opret tabel DDL med UDFØR STRAKS i Oracle-databasen