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.

FormatBeschreibung
0mon dd yyyy hh:miAM
1mm/dd/yy
2yy.mm.dd
3dd/mm/yy
4dd.mm.yy
5dd-mm-yy
6dd mon yy
7mon dd, yy
8hh:mm:ss
9mon dd yyyy hh:mi:ss:mmmAM
10mm-dd-yy
11yy/mm/dd
12yymmdd
13dd mon yyyy hh:mi:ss:mmm
14hh:mi:ss:mmm
20yyyy-mm-dd hh:mi:ss
21yyyy-mm-dd hh:mi:ss.mmm
100mon dd yyyy hh:miAM
101mm/dd/yyyy
102yyyy.mm.dd
103dd/mm/yyyy
104dd.mm.yyyy
105dd-mm-yyyy
106dd mon yyyy
107mon dd, yyyy
108hh:mm:ss
109mon dd yyyy hh:mi:ss:mmmAM
110mm-dd-yyyy
111yyyy/mm/dd
112yyyymmdd
113dd mon yyyy hh:mi:ss:mmm
114hh:mi:ss:mmm
120yyyy-mm-dd hh:mi:ss
121yyyy-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.

Von Michael