Problem:
Du vil have den aktuelle dato (uden klokkeslæt) i Oracle.
Løsning 1 (hvis du ikke har noget imod nullerne som tiden):
SELECT TRUNC(CURRENT_DATE) AS current_date FROM dual;
Hvis du f.eks. skulle køre denne forespørgsel den 16. juni 2021, ville resultattabellen se sådan ud:
aktuel_dato |
---|
2021-06-16T00:00:00Z |
Diskussion:
Oracle har ikke en datatype, der kun gemmer datoen uden klokkeslæt. Men hvis du ikke har noget imod nullerne i stedet for tiden, kan du blot gemme en dato i en DATE
datatype (som gemmer både dato og klokkeslæt i Oracle). For at få den aktuelle dato og tid som en DATE
værdi, kan du blot bruge CURRENT_DATE
. For at slippe af med tiden (og have nuller i stedet), skal du afkorte datoen:
SELECT TRUNC(CURRENT_DATE) AS current_date FROM dual;
Løsning 2 (hvis du kun vil have datoen og ikke nuller i stedet for tiden):
SELECT TO_CHAR(CURRENT_DATE, 'yyyy-MM-dd') AS current_date FROM dual;
Hvis du f.eks. skulle køre denne forespørgsel den 16. juni 2021, ville resultattabellen se sådan ud:
aktuel_dato |
---|
2021-06-16 |
Diskussion:
For at få en tekst med VARCHAR2
type, der gemmer en dato, kan du bruge TO_CHAR()
funktion i Oracle. Du skal angive dato/tidsstemplet, der skal konverteres som det første argument, og i det format, som du vil gemme datoen i som det andet argument.
Da du vil have den aktuelle dato, er det første argument CURRENT_DATE
. Det andet argument er dit valg. For eksempel 'yyyy-MM-dd'
står for 'år-måned-dag', hvor måneden er numerisk frem for tekst. Tabellen nedenfor viser nogle eksempler på datoformater og det respektive output for datoen 16. juni 2021.
datoformat | resultat |
---|---|
'ÅÅÅÅ-MM-DD' | 2021-06-16 |
'ÅÅÅÅ/MM/DD' | 2021/06/16 |
'ÅÅÅÅ MM DD' | 2021 06 16 |
'DD-MAN-ÅÅÅÅ' | 16-JUN-2021 |
'DD-MAN-ÅÅ' | 16-JUN-21 |
'FMMonth DD, YYYY' | 16. juni 2021 |
Du kan læse mere om datoformater her.