sql >> Database >  >> RDS >> Oracle

LAST_DAY() Functie in Oracle

In Oracle Database, de LAST_DAY() functie retourneert de laatste dag van de maand die de opgegeven datum bevat.

Het accepteert één argument, namelijk de datum waarvoor u de laatste dag van de maand wilt vinden.

Syntaxis

De syntaxis gaat als volgt:

LAST_DAY(date)

Waar date is de datumuitdrukking waarvoor u de laatste dag van de maand wilt vinden.

Voorbeeld

Hier is een voorbeeld:

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

Resultaat:

28-FEB-30

In dit geval gebruiken we een datum in februari. Het blijkt dat februari in dat jaar 28 dagen heeft.

Dit gebeurt er als we de datum verhogen naar het volgende schrikkeljaar:

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

Resultaat:

29-FEB-32

De laatste dag van de maand wordt gedefinieerd door de sessieparameter NLS_CALENDAR . Zie Hoe u de waarden van de NLS-parameters kunt controleren om erachter te komen welke agenda uw sessie gebruikt. De mijne gebruikt de Gregoriaanse kalender.

De datum wordt ook geretourneerd in het formaat dat is opgegeven voor uw sessie. In dit voorbeeld gebruikt mijn sessie het standaardformaat voor wanneer de NLS_TERRITORY parameter is ingesteld op AMERICA . Je kunt de datum- en tijdnotaties van je sessie altijd wijzigen als je dat wilt.

Andere datum/tijd-waarden

Het werkt ook met andere datetime-waarden, zoals TIMESTAMP , enz:

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

Resultaat:

28-FEB-30

Het retourtype is echter altijd DATE , ongeacht het gegevenstype van het argument.

Data buiten bereik

Nuldatums en andere datums die buiten het bereik vallen, resulteren in een fout.

Voorbeeld:

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

Resultaat:

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

Zoals de foutmelding aangeeft, moet het (volledige) jaar tussen -4713 . zijn en +9999 , en niet 0 . zijn .

Huidige datum

We kunnen SYSDATE doorgeven als het datetime-argument om de huidige datum te gebruiken:

SELECT 
    SYSDATE,
    LAST_DAY(SYSDATE)
FROM DUAL;

Resultaat:

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

Ontbrekend argument

Bellen LAST_DAY() met het verkeerde aantal argumenten, of zonder het doorgeven van argumenten, resulteert in een fout:

SELECT LAST_DAY()
FROM DUAL;

Resultaat:

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. MySQL 'user_id' in waar clausule dubbelzinnig probleem is

  2. Is er een PostgreSQL-equivalent van SQL Server-profiler?

  3. Gebruik string bevat functie in Oracle SQL-query

  4. ORA-00904 ongeldige identifier op decodeer alias