Das Datum ist was ganz besonderes was den SQL-Server angeht. Denn das ist nicht immer optimal gelöst . Deshalb stellt uns der SQL-Server eine Handvoll toller Funktionen zur Seite die uns das Arbeiten mit dem “fantastischen” Datum behilflich sind.
Am besten wir schauen uns erst mal die Datentypen an, die wir bezüglich eines Datums verwenden können.
Datumsdatentypen
Date – Kann nur das Datum speichern (nur für SQL-Server 2008 oder höher nutzbar)
Time – Kann nur die Zeit speichern, Genauigkeit: 100ns (nur für SQL-Server 2008 oder höher nutzbar)
Datetime – Kann Datum und Zeit speichern, Genauigkeit: 3ms
Datetime2 – Kann Datum und Zeit speichern, Genauigkeit: 100ns
Smalldatetime – Kann Datum und Zeit speichern, Genauigkeit 1minute
Datetimeoffset – Kann die Zeit und die Zeitzone anzeigen, Genauigkeit 100ns (nur für SQL-Server 2008 oder höher)
Grundsätzlich sollte man natürlich nur den Datentyp benutzen den man auch wirklich braucht. Alle zusätzlich Abspeicherungsarten brauchen auch mehr Speicher.
Funktionen
GETDATE
Liefert das aktuelle Datum und Zeit zurück im Datetime-Format allerdings auf die Millisekunde genau. Es darf kein Parameter übergeben werden.
Ausgabe:
WICHTIG: Wenn jemand eine Abfrage starten will die z.B.: Alle Bestellungen des heutigen Tages abfragen soll, darf man nicht vergessen das Datum von Getdate() in ein Date-Datentyp zu casten/converten. Bei denjenigen die das nicht beachten sollten, wird die Chance sehr gering einen Datensatz zurück zubekommen. Denn schließlich muss die Bestellung zum gleichen Zeitpunkt (Millisekunden!) eingetragen werden wie die Abfrage ausgeführt wird.
DATEADD
Diese Funktion kann dazu benutzt werden um zu einem bestimmten Datum eine Anzahl von Tagen, Monaten usw. hinzuzufügen oder abzuziehen.
Wenn nun jemand das Datum in 35 Tagen wissen will, könnte er die Funktion Dateadd benutzen.
Allerdings fordert die Funktion drei Parameter. Dateadd(intervall, Anzahl, Datum).
Intervalle
Hier muss festgelegt werden was ich zum Datum dazu addieren oder subtrahieren will.
Hier eine “Liste” von alles Intervallen: d, day, dd, dayofyear, dw, dy, hh, hour, iso_week, isowk,
isoww, m, mcs, mi, microsecond, millisecond, minute, mm, month, ms, n, nanosecond, ns, q, qq,
quarter, s, ss, tz, tzoffset, w, week, weekday, wk, ww, y, year, yy, yyyy
Die meisten Intervalle sind selbsterklärend, um den Blogeintrag jetzt nicht unnötig in die Länge
zu ziehen ist hier eine Übersicht über fast
alle Intervalle http://technet.microsoft.com/de-de/library/ms186819.aspx. Falls er nicht im Link
zu finden ist Mail an MariusI@ppedv.de.
Anzahl
Hier Bedarf es glaub ich keiner großen Erklärung. An dieser Stell muss die Anzahl der Tage oder
was auch immer für ein Intervall verwendet wurde, die man dazu addieren will.
Datum
Dort muss das Datum angegeben werden zu dem das ganze hinzu gerechnet werden soll.
Select Dateadd(dd, 35, '27.01.2014')
Ergebnis:
Um nun das Datum vor 35 Tagen herauszufinden muss man lediglich ein Minus vor die Anzahl der Tage machen.
DATEDIFF
Mit dieser Funktion ist es möglich Differenz zwischen zwei Daten zu bestimmen. In was die Differenz zurückgeben wird hängt vom übergebenen Intervall ab. Der Funktion müssen drei Parameter mitgegeben werden. Intervall, Erstes Datum und Zweites Datum.
Select Datediff(mm, Getdate(), '24.12.2014')
Ausgabe:
Wer gerne wissen möchte wie viele Monate es noch bis Weihnachten (2014) ist. Die Abbildung zeigt es. Hier können natürlich auch andere Intervalle angegeben werden.
DATENAME
Diese Funktion liefert den Namen eines Datums zurück. Macht allerdings nur mit zwei Intervallen: DW (Wochentag) und MM (Monat). Schließlich haben nur Monate und Wochentage Namen. Netter Nebeneffekt der Funktion ist das alles in Varchar um konvertiert wird.
Select Datename(DW, Getdate())
Ausgabe:
Heute ist der 27.01.2014 und es ist Montag (Ja es ist Montag und ich bin in der Lage ein Blogeintrag zu schreiben, manchmal verblüff ich mich selbst).
DATEPART
Mit dieser Funktion ist es möglich einen Teil eines bestehenden Datums zu extrahieren. Die Funktion erwartet zwei Parameter, Intervall und Datum. Der Intervall gibt hier an welcher Teil des Datums extrahiert werden soll.
Select Datepart(yy, Getdate())
Ergebnis:
Das Ergebnis ist denke ich selbsterklärend.
Alternative zur Datepart-Funktion kann man auch die Funktionen Day(), Month() oder Year() verwenden.
Denen muss man lediglich einen Parameter mitgeben und zwar das Datum.
Die Ausgabe ist die selbe.
Ich hoffe ich konnte dem ein oder anderen die Datumsfunktionen in SQL näherbringen.