Problem:
Du vill få det aktuella datumet (utan tiden) i Oracle.
Lösning 1 (om du inte har något emot nollorna som tiden):
SELECT TRUNC(CURRENT_DATE) AS current_date FROM dual;
Om du till exempel skulle köra den här frågan den 16 juni 2021 skulle resultattabellen se ut så här:
aktuellt_datum |
---|
2021-06-16T00:00:00Z |
Diskussion:
Oracle har ingen datatyp som endast lagrar datumet utan tiden. Men om du inte har något emot nollorna i stället för tiden, kan du helt enkelt lagra ett datum i en DATE
datatyp (som lagrar både datum och tid i Oracle). För att få aktuellt datum och tid som DATE
värde kan du helt enkelt använda CURRENT_DATE
. För att bli av med tiden (och ha nollor istället) måste du trunkera datumet:
SELECT TRUNC(CURRENT_DATE) AS current_date FROM dual;
Lösning 2 (om du bara vill ha datum och inte nollor i stället för tiden):
SELECT TO_CHAR(CURRENT_DATE, 'yyyy-MM-dd') AS current_date FROM dual;
Om du till exempel skulle köra den här frågan den 16 juni 2021 skulle resultattabellen se ut så här:
aktuellt_datum |
---|
2021-06-16 |
Diskussion:
För att få texten VARCHAR2
typ som lagrar ett datum kan du använda TO_CHAR()
funktion i Oracle. Du måste ange datum-/tidsstämpeln som ska konverteras som det första argumentet och i det format som du vill lagra datumet i som det andra argumentet.
Eftersom du vill ha det aktuella datumet är det första argumentet CURRENT_DATE
. Det andra argumentet är ditt val. Till exempel, 'yyyy-MM-dd'
står för 'år-månad-dag', där månaden är numerisk snarare än text. Tabellen nedan visar några exempel på datumformat och respektive utdata för datumet 16 juni 2021.
datumformat | resultat |
---|---|
'ÅÅÅÅ-MM-DD' | 2021-06-16 |
'ÅÅÅÅ/MM/DD' | 2021/06/16 |
'ÅÅÅÅ MM DD' | 2021 06 16 |
'DD-MÅN-ÅÅÅÅ' | 16-JUN-2021 |
'DD-MÅN-ÅÅ' | 16-JUN-21 |
'FMMonth DD, YYYY' | 16 juni 2021 |
Du kan läsa mer om datumformat här.