Oracle

Oracle

Neben numerischen Werten und Zeichenketten existiert der häufig verwendete Datentyp date für Datum (Date) und Zeitstempel (Timestamp). Das Datum kann millisekundengenau verarbeitet werden. Im Folgenden habe ich die Oracle Datumsfunktionen zur Datumsberechnung aufgeführt, welche von mir häufig verwendet werden.

Formatierungsmaske

Die Oraclefunktionen zur Datumsberechnung und Umwandlung benötigen teilweise eine Formatierungsmaske (format_mask), welche angeben, an welcher Stelle des Strings zu Umwandlung/Berechnung sich welcher Teil des Datums befindet. Die folgende Tabelle enthält nur einen kleinen Teil der möglichen Parameter, da ich andere Parameter fast nie verwende:

Parameter Bedeutung Beispiel
YYYY Jahr vierstellig 2008
YY Jahr zweistellig 08
MM Monat 11
WW Kalenderwoche 51
D Wochentag (1-7) 3
DD Tag im Monat 15
HH24 Stunde (24h-Format) 13
MI Minute der Stunde 45
SS Sekunde der Minute 34

to_date()

Mit der Funktion to_date() kann aus einem String ein Datum erzeugt werden. Dazu wird anhand der obigen Formatierungsmaske festgelegt, wie das Datum im String aufgebaut ist. Die to_date() Funktion erstellt ein Datum, wenn dieses gültig ist, ansonsten wird mit einem Fehler abgebrochen. Beispiele:

  • 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()

Die Funktion to_char() wandelt ein Datum zurück in eine Zeichenkette um. Es werden wie bei to_date() die gleichen Parameter verwendet. Jedoch wird statt einem String mit einem Datum die Datumsvariable bzw. das Datumsfeld übergeben. Beispiele:

  • select to_char(sysdate,'YYYY') from dual; — Das aktuelle Jahr 2010 wird ausgegeben
  • select to_char(sysdate,'HH24:MI:SS') from dual; — aktuelle Uhrzeit wird ausgegeben

Mit Monaten arbeiten

Die obigen Beispiele behandeln einfache Umrechnungen. Bei Monaten können Sie mittels der Funktion last_day() kann aus einem übergebenen Datum der letzte Tag des Monats ermittelt werden. Es wird wiederum ein Datum zurückgegeben:

  • select last_day(sysdate) from dual; –Datum mit letztem Tag des aktuellen Monats wird zurückgegeben
  • select to_char( last_day(sysdate) , 'DD') from dual; –nur der letzte Tag des aktuellen Monats wird als String zurückgegeben

Einfacher ist das ermitteln des ersten Tages des Monats. Hierfür hat Oracle keine Funktion bereitgestellt

  • select to_date( sysdate, '01.MM.YYYY') from dual; — Rückgabe als String mit 01. des Monats

Da der erste Tag des Monats immer 01 ist, wird in der Funktionsmaske statt DD der Wert 01 eingetragen, da dieser nicht interpretiert, sondern direkt übernommen wird.

Die Funktion add_months() addiert eine beliebige Anzahl Monate auf ein Datum auf. Beispiel:

  • select add_months( to_date('04.05.2010','DD.MM.YYYY'), 4 ) from dual; — Gibt das Datum 04.09.2010 zurück

Einfache Berechnungen

Auf ein Datum kann eine beliege Zahl addiert oder subtrahiert werden. Der Wert 1 entspricht einem Tag. So zum Beispiel bei

  • select sysdate + 1.5 from dual;

ein Datum zurückgegeben, welches um 1,5 Tage bzw. 36 Stunden erhöht wurde.

Oracle Datumsfunktionen
Markiert in:            

7 thoughts on “Oracle Datumsfunktionen

  • 16. Dezember 2010 bei 00:00
    Permalink

    Wie kann ich weitere Berechnungen mit Datümern machen? Zum Beispiel Anzahl Tage zwischen 2 Datümern?
    Danke!

    • 6. Januar 2011 bei 07:14
      Permalink

      Die Differenz zwischen zwei Feldern (deklariert als DATE) wird in Tagen mit Nachkommastellen angegeben, wenn diese Felder voneinander subtrahiert werden.

  • 31. Dezember 2010 bei 00:19
    Permalink

    Hey, gibt es das auch für MySQL und PHP? Oder kann das jemand für mich herausfinden? ;-)

  • 7. November 2012 bei 11:27
    Permalink

    Kann man in Date überhaupt mit MS arbeiten? Wie wäre das Format in Timestamp? ‘DD.MM.YYYY HH24:MI:SS.FF’ ? wie viele “Nachkommastellen” haben die Sekunden dann?

  • 20. Juni 2013 bei 07:03
    Permalink

    Danke, das war super hilfreich!

  • 13. April 2014 bei 19:06
    Permalink

    Danke für diese Infopage – ich habe sie sofort in meine Lesezeichen aufgenommen.
    Ich arbeite viel mit Datenbanken und Arbeiten mit Datumswerten in Oracle ist ECHT anstrengend.
    Ich persönlich arbeite lieber mit MySQL – aber man muss sich ja “leider” nach den Kunden richten ;-).
    Danke für die Infos, echt hilfreich!
    Grüße,
    Peter

  • 9. Dezember 2014 bei 17:27
    Permalink

    Danke für die guten Tipps.
    Ich hab nun aber eine Abfrage
    SELECT T.* FROM Tabelle T WHERE T.DatumZeit between “gestern 6 Uhr” and “heute 6 Uhr”; sein soll. Wie mache ich das am geschicktesten?

Kommentare sind deaktiviert.