Es gibt viele Arten ein Datum zu ermitteln oder zu manipulieren.
Hier sind die Interessantesten Möglichkeiten der Datummanipulation im SQL-Server.
Angefangen vom Monatsletzten des Vormonats bis hin zur Ermittlung der Wochentages eines Datums.
-- Ermittlung des Monatsletzten im Vormonat. SELECT DATEADD(DD,-1,DATEADD(m, DATEDIFF(m,0,GETDATE()), 0)) -- Ermittlung des Monatsersten. SELECT DATEADD(DD,0,DATEADD(m, DATEDIFF(m,0,GETDATE()), 0)) -- Ermittlung des Monatsersten Folgemonat. SELECT DATEADD(DD,0,DATEADD(m, DATEDIFF(m,0,GETDATE())+1, 0)) -- Ermittlung des Monatletzten. SELECT DATEADD(DD,-1,DATEADD(m, DATEDIFF(m,0,GETDATE())+1, 0)) -- oder SELECT EOMONTH('20150201'); -- gibt den letzten Tag des Monats Februar im Jahr 2015 aus. -- Ermittlung Jahreserster SELECT DATEADD(DD,0,DATEADD(yyyy, DATEDIFF(yyyy,0,GETDATE()), 0)) -- Ermittlung Wochentage SELECT DATEPART(weekday, GETDATE()) /* Rückgabewerte für Montag = 1; Dienstag = 2; Mittwoch = 3; Donnerstag = 4 ;Freitag = 5; Samstag = 6; Sonntag = 7 */ -- Ermittlung der Kalenderwoche SELECT DATEPART( wk, GETDATE() )
Neben diesen kleinen Informationen rund um das Datum kann mit einem Datum auch gerechnet werden.
DATEADD
--DateADD SELECT DATEADD(day, 5, GetDate())
In diesem Beispiel werden zum aktuellen Datum 5 Tage addiert. Die Syntax kommt euch sicher bereits bekannt vor.
Hier habt ihr eine Aufstellung der Datumsteile für den ersten Parameter:
- year, yy, yyyy
- quarter, qq, q
- month, mm, m
- dayofyear, dy, y
- day, dd, d
- week, wk, ww
- weekday, dw
- hour, hh
- minute, mi, n
- second, ss, s
- millisecond, ms
Der dritte Parameter kann ein positiver wie auch ein negativer Wert sein.
Optional kann Parameter 2 und 3 durch eine Variable ersetzt werden.
DATEDIFF
Der Befehl DateDiff liefert die Spanne zwischen zwei Datumswerten zurück.
-- DateDiff DATEDIFF(Datumsteil, Startdatum, Endedatum)
Wie auch bei DateAdd ist der Parameter wie oben anzugeben. Hierbei handelt es sich jedoch um den gewünschten Rückgabewert.
Das Startdatum und das Endedatum kann ebenfalls wie bei DateAdd als Parameter angegeben werden.
CONVERT
Der SQL-Server liefert oft nicht das gewünschte / benötigte Datumsformat.
Mit dem Befehl CONVERT kann man sich das Datum in ein beliebiges Format konvertieren.
-- Convert Date CONVERT(varchar(10), GetDate(), "Formatangabe")
Die Syntax ist recht einfach. Als erstes sagt man in welchen Datentypen man konvertieren möchte. Der zweite Parameter ist das eigentliche Datum. Im Dritten Parameter gibt man das Format an. Es gibt eine Mengen an Möglichkeiten das Datum zu formatieren. Der Varchar-Wert beim Convert muss je nach Formatvorgabe angepasst werden!
Hier eine Aufstellung.
Format | Beschreibung |
---|---|
0 | mon dd yyyy hh:miAM |
1 | mm/dd/yy |
2 | yy.mm.dd |
3 | dd/mm/yy |
4 | dd.mm.yy |
5 | dd-mm-yy |
6 | dd mon yy |
7 | mon dd, yy |
8 | hh:mm:ss |
9 | mon dd yyyy hh:mi:ss:mmmAM |
10 | mm-dd-yy |
11 | yy/mm/dd |
12 | yymmdd |
13 | dd mon yyyy hh:mi:ss:mmm |
14 | hh:mi:ss:mmm |
20 | yyyy-mm-dd hh:mi:ss |
21 | yyyy-mm-dd hh:mi:ss.mmm |
100 | mon dd yyyy hh:miAM |
101 | mm/dd/yyyy |
102 | yyyy.mm.dd |
103 | dd/mm/yyyy |
104 | dd.mm.yyyy |
105 | dd-mm-yyyy |
106 | dd mon yyyy |
107 | mon dd, yyyy |
108 | hh:mm:ss |
109 | mon dd yyyy hh:mi:ss:mmmAM |
110 | mm-dd-yyyy |
111 | yyyy/mm/dd |
112 | yyyymmdd |
113 | dd mon yyyy hh:mi:ss:mmm |
114 | hh:mi:ss:mmm |
120 | yyyy-mm-dd hh:mi:ss |
121 | yyyy-mm-dd hh:mi:ss.mmm |
Ich verwende am meisten das Format 102. Hier habt ihr ein gut formatiertes Datum, das auch gut sortiert werden kann.