SQL Grundkurs 1: Die Sprache erlernen

Datumsspalten mit MS SQL Server

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Aufgepasst - bei Datumswerten kommt es auf das richtige Format an und dieses ist nicht immer bei allen Datenbanksystemen dasselbe. Hier wird das Geheimnis um das Format beim MS SQL Server gelüftet.

Transkript

Datumsfelder stellen in der Praxis meist die größte Herausforderung dar, wenn es darum geht mit ihnen zu filtern. Wie Sie damit umgehen sehen Sie in diesem Video. In ANSI-SQL gibt es für Datumswerte kein eigenes Typenkennzeichen. Datumswerte werden so wie Character unter einfache Hochkommas gesetzt. Wenn wir jetzt also nach Datum filtern wollen: ich hole mir unsere Personaltabelle und hier haben wir "Personalnummer", "Nachname", "Vorname" und verwenden noch das "Eintrittsdatum". Wenn wir jetzt filtern möchten nach dem Eintrittsdatum, dann müssen wir einfache Hochkomma setzen. Z.B. holen wollen wir alle die ab dem 1.Mai 2007 eingestellt worden sind. (Tippgeräusche) Also ergänze eine "where-Klausel" und ergänze jetzt die Bedingung "where Eintritt =" und jetzt muss ich das Datum als Character eingeben, z.B. als "01.05.2007". Was passiert nun, wenn ich diese Anweisung ausführe? Nicht nur, dass ich diese Treffer hier bekomme: Intern wird dieser Character, den ich hier eingegeben habe, in ein Datum umgewandelt. Denn nur ein Datum kann mit einem Datum verglichen werden. Da es sich um eine implizite Umwandlung handelt, wird dieser Text, den ich hier eingebe, vom System interpretiert. Das Problem, das sich in der Praxis stellen kann, ist: Wird dieser Text immer so interpretiert, wie wir uns das hier vorstellen? Das möchte ich nun auf diese Art und Weise veranschaulichen, (Tippgeräusche) indem ich hier momentan die Spracheinstellungen auf Englisch setze. Das heißt, z.B. Standardeinstellungen beim Englisch-sprachigen SQL-Server. Dieselbe Anweisung, dieselbe Datenbank ausgeführt, liefert mir dieses Mal mehr Ergebniszeilen, nämlich acht statt sechs. Der Grund ist der, das nun unter englischen Rahmenbedingungen dieser Text hier nicht als 1. Mai sondern als 5.Januar interpretiert wird. Und wenn wir genau schauen: Wo finden wir hier z.B. Maren Heuer? 1.April 2007 ist aus diesem Grund mit im Ergebnis und noch ein zweiter auch hier Peter Kofler mit demselben Eintrittsdatum. Das heißt, man muss hier Acht geben in welchem Format man unter welchen Rahmenbedingungen ein Datum eingibt. Wie kann man jetzt mit dieser Problemstellung umgehen? Die Form der Datumseingabe, wie Sie es hier gesehen haben, ist also nur dann sinnvoll, wenn ich die Rahmenbedingungen kenne und diese Rahmenbedingungen ad hoc gelten. Also bei ad hoc-Eingaben macht es durchaus Sinn, ein Datum so einzugeben. Weniger entscheidend als das Trenn-Zeichen ist die Reihenfolge. Ich setze jetzt z.B. hier bei meinem SQL-Server die Spracheinstellungen wieder zurück auf Deutsch. Wenn wir jetzt hier sehen bekommen wir dasselbe Ergebnis, diese sechs Zeilen, egal ob ich als Trennzeichen einen Punkt oder z.B. einen Bindestrich oder z.B. auch einen Schrägstrich verwende. Dasselbe gilt, ob ich jetzt führende Nullen verwende oder nicht, das spielt im Detail nicht so sehr eine Rolle. Viel entscheidender ist die Reihenfolge der Komponenten "Tag", "Monat", "Jahr". Häufig steht man vor der Situation, dass man entweder die Rahmenbedingungen kennt bzw. auf eine allgemein gültige Form kommen muss, weil die Anweisung z.B. innerhalb von einem Programmcode verwendet wird. Daher muss man dann einen Datumswert explizit umwandeln. (Tippgeräusche) Das heißt, wir überlassen nichts dem Zufall, genauer gesagt den Rahmenbedingungen und den Einstellungen aus der Server-Umgebung, sondern wir werden selber explizit konvertieren und dabei das zu verwendende Format mit angeben. Wie funktioniert das nun bei den einzelnen Datenbanksystemen? Jeweils mit einer entsprechenden Konvertierungsfunktion. Beim Microsoft SQL-Server ist das die Funktion "Convert". Die Funktion "Convert" hat drei Parameter: Den Zieldatentyp, in dem Fall z.B. "Datetime", das was zu konvertieren ist und das Format, das gebe ich in dem Fall über die Form 104 an. 104 entspricht im Deutschen dem Sprachcode 4, dass heißt leider kann man das Datum beim Microsoft SQL-Server nicht in irgendeiner Form ddmmyy, wie wir es von anderen Systemen vielleicht kennen, verwenden, sondern in dieser Form. Wie kommen Sie auf den Wert 104? Indem Sie "Convert" in der Online-Doku nachschlagen und dort finden Sie eine Tabelle mit all den vorhandenen Codes, die Sie verwenden können. Sie haben aber keine Möglichkeit ein Format zu verwenden, das in dieser Codeliste nicht aufgeführt ist. 104 ist eben das deutsche Format. Was bewirkt das jetzt? Wenn ich diese Anweisung nun ausführe, bekomme ich dieses Ergebnis. Unabhängig davon, welche Rahmenbedingungen vorherrschen. Denn wiederum stelle ich meine Rahmenbedingungen auf Englisch ein, das heißt eigentlich müsste ich jetzt acht Treffer bekommen. Diese Form ist aber nun allgemein gültig, losgelöst von den Rahmenbedingungen und liefert mir daher wie gewünscht meine richtigen Treffer, weil wir hier explizit konvertiert haben. Außerdem haben Sie bei dem Microsoft SQL-Server noch eine Möglichkeit das Datumsformat allgemein gültig einzugeben, nämlich indem Sie die Form vierstellige Jahresangabe "Monat/Tag" jeweils mit führender Null ohne Trennzeichen in dieser Reihenfolge eingeben. Auch diese Variante funktioniert immer, egal welche Rahmenbedingungen vorherrschen. Wenn sie die Konvertierung beim SQL-Server mittels "Convert-Funktion" verwenden, spielt das Trennzeichen wiederum eine untergeordnete Rolle. Das heißt, das deutsche Format 104 funktioniert auch dann, wenn Sie als Trennzeichen z.B. einen Schrägstrich verwenden. Alternativ können Sie natürlich auf Session-Ebene das Format verändern, entweder auf die Art und Weise, die Sie schon gesehen haben, indem sie über eine Set-Anweisung "set language german" deutsche Rahmenbedingungen schaffen und damit ein deutsches Format. Sie können natürlich auch andere Spracheinstellungen hier verwenden. Hiermit werden allerdings nicht nur das Datumsformat, sondern auch eine Reihe anderer Einstellungen geändert. Eine zweite Möglichkeit wäre auf Session-Ebene über die Anweisung "set date format" und dann eine Reihenfolge zu definieren; "dmy" würde z.B. die Reihenfolge "day-month-year" festsetzen. Diese Einstellung gilt auf Session-Ebene, das heißt, nur solange bis Sie sich ab- und wieder neu beim Server anmelden. Damit können Sie lediglich das Datumsformat ändern ohne z.B. andere Spracheinstellungen zu beeinflussen. Das heißt, Sie können z.B. sagen: Generell will ich englische Spracheinstellungen haben. Damit bekommen Sie z.B. auch Rückmeldungen oder Fehlermeldungen auf Englisch, aber Sie möchten, dass diese Anweisung hier Deutsch "day-month-year" interpretiert wird. Dann können Sie jetzt hier über die Einstellungen "set date format" diese Änderung vornehmen und dann bekommen Sie auch hier das Ergebnis wie erwartet, ohne dass Sie aber die Sprache selber geändert haben. Die absolut immer funktionierende Variante ist es, explizit mit "Convert" zu konvertieren oder beim SQL-Server das Format yyyymm und gedacht zweimal dd, also Monat und Tag mit führender Null zu verwenden. Ich empfehle Ihnen bei ad hoc-Eingaben in einem SQL-Editor entweder sich an die geltenden Rahmenbedingungen zu halten oder über "set date format" oder "set language" entsprechende Einstellungen vorzunehmen. Wenn Sie jedoch ihre SQL-Anweisungen im Programmcode hinterlegen und damit generell unabhängig sein wollen, empfehle ich Ihnen entweder die "convert" Funktion für ein explizites Konvertieren einzusetzen oder das allgemein gültige Datumsformat bei Microsoft-SQL-Server zu verwenden.

SQL Grundkurs 1: Die Sprache erlernen

Arbeiten Sie sich in die Grundlagen der Datenbanksprache SQL am Beispiel von Microsoft SQL Server, Oracle und MySQL ein und lassen Sie sich die praktische Nutzung erklären.

14 Std. 40 min (112 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!