KAPITEL 10 Datumswerte und Zeitstempel - beim O'Reilly Verlag
KAPITEL 10 Datumswerte und Zeitstempel - beim O'Reilly Verlag
KAPITEL 10 Datumswerte und Zeitstempel - beim O'Reilly Verlag
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
.4193548387096774193548387096774193548387<br />
-1.03225806451612903225806451612903225806<br />
-1.06451612903225806451612903225806451613<br />
-1.32258064516129032258064516129032258065<br />
Wenn Sie daraus ein Muster erkennen, haben Sie recht. Wie bereits gesagt, berechnet<br />
MONTHS_BETWEEN die Bruchkomponente aus der Anzahl der Monate <strong>und</strong> legt dabei<br />
31 Tage zugr<strong>und</strong>e. Daher wird jeder zusätzliche Tag, der über einen vollen Monat hinausgeht,<br />
als 1/31 Monat gerechnet <strong>und</strong>:<br />
1 geteilt durch 31 = .032258065 – ungefaehr!<br />
Nach dieser Regel müßte zwischen dem 31. Januar <strong>und</strong> dem 28. Februar 1994 ein Monat<br />
liegen – eine hübsche, r<strong>und</strong>e ganze Zahl. Doch für die Anzahl der Monate zwischen dem<br />
31. Januar 1994 <strong>und</strong> dem 1. März 1994 würde .032258065 hinzuaddiert.<br />
Die Funktionen ROUND <strong>und</strong> TRUNC<br />
Die Funktion ROUND r<strong>und</strong>et einen Datumswert nach den Vorgaben einer Formatmaske<br />
auf das nächste Datum auf, <strong>und</strong> die Funktion TRUNC schneidet ein Datum nach den<br />
Vorgaben einer Formatmaske ab. ROUND <strong>und</strong> TRUNC für Datums- <strong>und</strong> Uhrzeitwerte<br />
funktionieren analog zu ROUND <strong>und</strong> TRUNC für Zahlen (siehe »Funktionen zum R<strong>und</strong>en<br />
<strong>und</strong> Abschneiden« in Kapitel 9). Sie sind folgendermaßen spezifiziert:<br />
FUNCTION ROUND (datum_in IN DATE [, format_maske VARCHAR2]) RETURN DATE<br />
FUNCTION TRUNC (datum_in IN DATE [, format_maske VARCHAR2]) RETURN DATE<br />
Eine häufige Anwendung für die beiden Funktionen besteht darin, die Uhrzeitkomponente<br />
eines DATE-Werts auf Mitternacht (12:00:00 AM) zu setzen. Nach Konvention ist<br />
Mitternacht der Wert, den Sie nutzen, wenn Sie sich nicht für die Uhrzeit, sondern nur<br />
für das Datum interessieren. Der Unterschied zwischen den beiden Funktionen liegt in<br />
der Frage, ob sie die Uhrzeitkomponente nun komplett ignorieren oder sie zum Auf- oder<br />
Abr<strong>und</strong>en des resultierenden DATE-Werts einsetzen. Das folgende Beispiel zeigt die verschiedenen<br />
Ergebnisse der beiden Funktionen:<br />
DECLARE<br />
date_in DATE := TO_DATE('24-Feb-2002 05:16:00 PM'<br />
,'DD-MON-YYYY HH:MI:SS AM');<br />
date_ro<strong>und</strong>ed DATE;<br />
date_truncated DATE;<br />
BEGIN<br />
date_ro<strong>und</strong>ed := ROUND(date_in);<br />
date_truncated := TRUNC(date_in);<br />
DBMS_OUTPUT.PUT_LINE(<br />
TO_CHAR(date_ro<strong>und</strong>ed, 'DD-MON-YYYY HH:MI:SS AM'));<br />
DBMS_OUTPUT.PUT_LINE(<br />
TO_CHAR(date_truncated,'DD-MON-YYYY HH:MI:SS AM'));<br />
END;<br />
336 | Kapitel <strong>10</strong>: <strong>Datumswerte</strong> <strong>und</strong> <strong>Zeitstempel</strong>