Naast numerieke waarden en tekenreeksen is er het veelgebruikte gegevenstype date voor datums en tijdstempels. De datum kan met millisecondenprecisie worden verwerkt. Hieronder heb ik de Oracle datum functies voor het berekenen van datums vermeld, die ik vaak gebruik.
Opmaakmasker
De Oracle-functies voor datumberekening en -conversie vereisen soms een opmaakmasker (format_mask), dat aangeeft waar in de string voor conversie/berekening welk deel van de datum zich bevindt. De volgende tabel bevat slechts een klein deel van de mogelijke parameters omdat ik vrijwel nooit andere parameters gebruik:
| Parameter | Beschrijving | Voorbeeld |
|---|---|---|
| YYYY | Jaartal 4 cijfers | 2008 |
| YY | Jaartal 2 cijfers | 08 |
| MM | Maand | 11 |
| WW | Week van het jaar | 51 |
| D | Dag van de week (1-7) | 3 |
| DD | Dag van de maand | 15 |
| HH24 | Uur (24-uursformaat) | 13 |
| MI | Minuut | 45 |
| SS | Seconde | 34 |
to_date()
Met de functie to_date() kan uit een string een datum worden gegenereerd. Dit wordt gedaan door op basis van het bovenstaande opmaakmasker te bepalen hoe de datum binnen de string is gestructureerd. De functie to_date() creëert een datum als deze geldig is; anders eindigt het met een fout. Voorbeelden:
select to_date('02.10.2003','DD.MM.YYYY') from dual;select to_date('01.01.2010 15:45','DD.MM.YYYY HH24:MI') from dual;
to_char()
De functie to_char() converteert een datum terug naar een tekenreeks. Net als to_date() gebruikt het dezelfde parameters. In plaats van een string met een datum wordt echter de datumvariabele of het datumveld doorgegeven. Voorbeelden:
select to_char(sysdate,'YYYY') from dual;— huidige jaarselect to_char(sysdate,'HH24:MI:SS') from dual;— huidige tijd teruggeven
Werken met maanden
De bovenstaande voorbeelden hebben betrekking op eenvoudige conversies. Voor maanden kunt u de functie last_day() gebruiken om de laatste dag van de maand te bepalen vanaf een verstreken datum. Er wordt opnieuw een datum geretourneerd:
select last_day(sysdate) from dual;– Toont de laatste dag van de huidige maandselect to_char( last_day(sysdate) , 'DD') from dual;– retourneer alleen de laatste dag van de maand van de huidige maand
It’s easier to determine the first day of the month. Oracle has not provided a function for this
select to_date( sysdate, '01.MM.YYYY') from dual;— Retourdatum als een tekenreeks die de eerste dag van de maand bevat.
Omdat de eerste dag van de maand altijd 01 is, wordt in het functiemasker in plaats van DD de waarde 01 ingevoerd, omdat deze niet wordt geïnterpreteerd maar direct wordt overgenomen.
De functie add_months() voegt een willekeurig aantal maanden toe aan een datum. Voorbeeld:
select add_months( to_date('04.05.2010','DD.MM.YYYY'), 4 ) from dual;— Datum is 04.09.2010
Gemakkelijke berekening
Elk getal kan aan een datum worden toegevoegd of afgetrokken. De waarde 1 komt overeen met één dag. Bijvoorbeeld bij
select sysdate + 1.5 from dual;
er wordt een datum geretourneerd die met 1,5 dag of 36 uur is verlengd.
Leave a Reply