trunc(sysdate) - nette Spiele mit dem Datum
Über die trunc-date Funktion läßt sich ausgehend von einem Datumswert sehr einfach ein abgeleiteter Datumswert ermittelt: bspw. der Jahres-, Quartals-, Monats- oder Wochenanfang.
Die 11g Doku erläutert dies an zwei Stellen:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions209.htm#SQLRF06151
bzw.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions242.htm#sthref2718
So liefert
das DATUM des Quartalsersten (im Bsp. den 01.01.2011).
Wichtig ist, dass trunc immer ein Datum zurückliefert, keinen String.
Einige Beispiele anhand des 20.Feb 2011 (ein Sonntag in der 07 KW in 2011):
TRUNC(TO_DATE('20.02.2011'),'D')
--------------------------------
14.02.11
-> liefert das Datum des ersten Tags der Woche (in D, das Datum des Montags)
TRUNC(TO_DATE('20.02.2011'),'DD')
---------------------------------
20.02.11
-> liefert das Datum ohne Uhrzeitangabe
TRUNC(TO_DATE('20.02.2011'),'DDD')
----------------------------------
20.02.11
-> liefert das Datum ohne Uhrzeitangabe
TRUNC(TO_DATE('20.02.2011'),'MM')
---------------------------------
01.02.11
-> liefert das Datum des Monatsersten
TRUNC(TO_DATE('20.02.2011'),'Q')
--------------------------------
01.01.11
-> liefert das Datum des Quartalsersten
TRUNC(TO_DATE('20.02.2011'),'Y')
--------------------------------
01.01.11
-> liefert das Datum des ersten Tags des Jahres
TRUNC(TO_DATE('20.02.2011'),'IY')
---------------------------------
03.01.11
-> liefert das Datum des ersten Tags des ISO-Jahres (= Montag der 1.KW)
Anmerkung:
Die Angabe TO_DATE('20.02.2011') verwende ich hier nur aus Abkürzungsgründen. Sauber und in Anwendungen ausschließlich zu verwenden ist TO_DATE('20.02.2011','dd.mm.yyyy')!
Die 11g Doku erläutert dies an zwei Stellen:
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions209.htm#SQLRF06151
bzw.
http://download.oracle.com/docs/cd/B28359_01/server.111/b28286/functions242.htm#sthref2718
So liefert
select trunc(to_date('06.02.2011'),'q') from dual;
das DATUM des Quartalsersten (im Bsp. den 01.01.2011).
Wichtig ist, dass trunc immer ein Datum zurückliefert, keinen String.
Einige Beispiele anhand des 20.Feb 2011 (ein Sonntag in der 07 KW in 2011):
select trunc(to_date('20.02.2011'),'d') from dual;
select trunc(to_date('20.02.2011'),'dd') from dual;
select trunc(to_date('20.02.2011'),'ddd') from dual;
select trunc(to_date('20.02.2011'),'mm') from dual;
select trunc(to_date('20.02.2011'),'q') from dual;
select trunc(to_date('20.02.2011'),'y') from dual;
select trunc(to_date('20.02.2011'),'iy') from dual;
TRUNC(TO_DATE('20.02.2011'),'D')
--------------------------------
14.02.11
-> liefert das Datum des ersten Tags der Woche (in D, das Datum des Montags)
TRUNC(TO_DATE('20.02.2011'),'DD')
---------------------------------
20.02.11
-> liefert das Datum ohne Uhrzeitangabe
TRUNC(TO_DATE('20.02.2011'),'DDD')
----------------------------------
20.02.11
-> liefert das Datum ohne Uhrzeitangabe
TRUNC(TO_DATE('20.02.2011'),'MM')
---------------------------------
01.02.11
-> liefert das Datum des Monatsersten
TRUNC(TO_DATE('20.02.2011'),'Q')
--------------------------------
01.01.11
-> liefert das Datum des Quartalsersten
TRUNC(TO_DATE('20.02.2011'),'Y')
--------------------------------
01.01.11
-> liefert das Datum des ersten Tags des Jahres
TRUNC(TO_DATE('20.02.2011'),'IY')
---------------------------------
03.01.11
-> liefert das Datum des ersten Tags des ISO-Jahres (= Montag der 1.KW)
Anmerkung:
Die Angabe TO_DATE('20.02.2011') verwende ich hier nur aus Abkürzungsgründen. Sauber und in Anwendungen ausschließlich zu verwenden ist TO_DATE('20.02.2011','dd.mm.yyyy')!
Kommentare
Kommentar veröffentlichen