SQL Grundkurs 2: Aufgaben und Lösungen

Tipp zu Beispiel 7: Datum formatieren mit MS SQL Server

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Nutzen Sie die Möglichkeiten, die Microsoft SQL Server Ihnen bietet, um ein Datum in einem gewünschten Format auszugeben.

Transkript

In diesem Video möchte ich Ihnen zeigen, wie Sie mit dem Microsoft SQL Server ein Datum für die Ausgabe formatieren können. Standardmäßig haben wir bei Beispiel 7 gesehen, wird ein Datum mit dem Microsoft SQL Server immer im ISO-Format ausgegeben, Jahr, Monat, Tag mit einem Bindestrich als Trennzeichen, gegebenenfalls die Uhrzeit. Die Uhrzeit wird immer angezeigt bei einem DATETIME-Datentyp, auch wenn Sie nicht vergeben ist, dann steht hier einfach 00:00 Uhr. In unserer Beispieldatenbank findet sich hier 08:00 Uhr beim Eintrittsdatum, ist nicht unbedingt notwendig, dass man hier eine Uhrzeit dabei hat, aber weil wir es für ein anderes Beispiel benötigen habe ich sie hier ergänzt. Wie können wir jetzt also das Datum anders formatieren? Ich werde immer wieder danach gefragt, wie das funktioniert. Generell sollte man ja Optik nicht in SQL betreiben, sondern im nachgelagerten Front-End-Programm, indem man die Daten aufbereitet, darstellt, wie auch immer, aber manchmal gibt es halt doch die Anforderung, das direkt in SQL zu machen. Ich möchte Ihnen jetzt zeigen, wie Sie mit dem Microsoft SQL Server ein Datum, zum Beispiel Deutsch ausgeben - Tag, Monat, Jahr - in der Reihenfolge mit einem Punkt dazwischen. Dazu müssen Sie das Datum in einen Text konvertieren. Es gibt zwei Konvertierungsfunktionen beim Microsoft SQL Server, einerseits die Funktion CONVERT, andererseits die Funktion CAST. CAST ist hier nicht geeignet, weil CAST keinen Formatparameter aufweist. CONVERT hingegen, hat als dritten Parameter die Möglichkeit ein Format einzugeben. Die CONVERT-Funktion bekommt als ersten Parameter den Zieldatentyp, in dem Fall ein varchar. Ohne Angabe von Zeichen wird hier 30 Zeichen verwendet, was hier immer ausreichend ist, und deshalb belasse ich das gleich so, dann - was möchte ich konvertieren - Inhalt der Spalte eintritt, und dann die 104 für Deutsch. Ich führe jetzt einmal diese Anweisung aus, und wir sehen jetzt, dass jetzt hier das Eintrittsdatum, als auch das Jubiläum, bei dem ich die gleiche Konvertierungsfunktion auch angewendet habe, nun in wesentlich optisch schönerer Form dargestellt wird. Sie werden sich jetzt sicher fragen, was hat das hier mit diesem 104 Parameter auf sich? Bei vielen anderen Systemen verwendet man für Datenformate DD.MM.YY, oder andere Darstellungsformen. Aber 104 - macht schon einen sehr merkwürdigen Eindruck. Die Erklärung finden wir in der Online-Hilfe. Ich markiere dazu hier CONVERT, drücke F1 und wir bekommen die Onlinedokumentation für CAST und CONVERT, und wenn wir da etwas hinunterscrollen, finden wir hier eine Tabelle, die also enthält welche Zahlencodes welchen Format- oder welcher Formatausgabe entsprechen, und da steht eben 104 für das deutsche Format mit vierstelliger Jahresangabe. Ist nicht - aus meiner Sicht - die optimalste Form, aber es ist so, und wir müssen sie hinnehmen. Also damit können wir ein Datum mit Format in einen Text umwandeln. Achten Sie darauf, dass das Ergebnis, das was wir hier sehen, nun ein Text ist, und für Weiterberechnungen oder Sortierungen nicht mehr unbedingt geeignet ist. Vielleicht fällt Ihnen jetzt auf, ich habe hier nach eintritt sortiert, und jetzt überlagert hier der Aliasname den ursprünglichen Spaltennamen, und die Sortierung passt hier überhaupt nicht mehr, dass ist gar nicht mehr richtig aufsteigend nach Datum sortiert. Wie kann ich das lösen? Einfache Variante - ich gebe hier zum Beispiel einen anderen Aliasnamen ein, eintrittsdatum, dann sehen wir jetzt, dass die Sortierung explizit nach der Spalte datum und nicht nach diesem Aliasnamen für diesen Ausdruck basiert, das heißt jetzt wird nicht nach Textkriterien sortiert, sondern wieder korrekt nach Datumswerten, so wie es sein soll. Wenn Sie jetzt aber sagen, nee, ich möchte aber unbedingt hier eintritt wieder als Aliasnamen vergeben - was könnte ich noch machen? Naja - ich könnte beim Sortieren explizit vor dem Spaltennamen eintritt, die Herkunft, sprich den Namen der Tabelle mit Punkt getrennt angeben, und dann bedeutet das, dass explizit nach dieser Spalte, und nicht nach diesem Aliasnamen sortiert werden soll, und dann passt die Sortierung auch. Also immer beachten, wenn man mit der CONVERT-Funktion ein Datum formatiert, dann ist es ein Text und ist nicht mehr für Berechnungen geeignet, und wird nach anderen Kriterien sortiert. Manchmal möchte man im Format ja auch, zum Beispiel einen Wochentag oder einen Monatsnamen in Worten haben. Dazu stellt uns der SQL Server die Funktion DATENAME zur Verfügung. Ich habe jetzt hier eine ganz einfache Anweisung geschrieben, um einerseits DATENAME mit dem Parameter month, und einmal mit weekday zu verwenden. Die Parameter für Funktionen finden Sie immer in der Onlinedokumentation, dazu einfach den Funktionsnamen markieren und F1 drücken. Ich führe nun diese Anweisung aus und wir sehen, dass wir den Monatsnamen und Wochentag interessanterweise Russisch bekommen. Das hängt damit zusammen, das ich mit diesen Anweisungen, die ich hier auch hingeschrieben habe, vorweg vorhin schon ein bisschen experimentiert habe. Ich stelle jetzt einmal mit dieser Anweisung SET LANGUAGE auf Sessionebene die Sprache um. Standardmäßig haben wir bei unserer deutschen Umgebung Deutsch, und wenn ich diese Anweisung ausführe, stelle ich die Spracheinstellungen wieder auf die Standardeinstellung german zurück. Und ich führe jetzt diese Anweisung aus, und dann bekommen wir Februar als monat und Mittwoch als wochentag, zum Beispiel. Über SET LANGUAGE kann ich also steuern, in welcher Sprache, zum Beispiel hier auch auf english, - Monats- und Wochentagsnamen ausgegeben werden. Und das kann eben auch, im Spezialfall, zum Beispiel Russisch sein. Ich kann Ihnen jetzt das nicht vorlesen, was das wirklich heißt, da ich diese Sprache nicht beherrsche, aber vielleicht ist ja der ein oder andere unter Ihnen, die das können. Ich vergesse nun nicht, am Ende wieder auf Deutsch zurückzustellen. Wenn Sie mit dem Format Parameter 104, wie vorhin gesehen, nicht so glücklich sind, ich bin es auch nicht, dann gibt es ab dem SQL Server 2012 eine neue Möglichkeit: Eine neue Funktion - die Funktion FORMAT. Die Funktion FORMAT ist sehr umfangreich, liefert eine Vielzahl an Möglichkeiten, um eben ein Datum, eine Zahl, auch ein Währungsformat einzustellen und andere Dinge. Ich zeige Ihnen kleine Beispiele dazu. Die FORMAT-Funktion hat drei Parameter, als ersten, was ich formatiere, danach wie und ich kann dann hier noch einen culture, einen Kultur Parameter angeben. Was bewirkt der? Wir werden gleich in einem weiteren Beispiel sehen, dass ich ein Format hier auch detailliert angeben kann, ein Datumsformat, zum Beispiel mit DD.MM.YYYY, aber ich kann auch generell sagen mit einem D, ich möchte ein Datum, und dann über die culture sozusagen das Standardformat definieren. Wenn ich jetzt hier also 'de-de' verwende, bedeutet das generell Deutsch, und die Unterform Deutsch - Deutschland. Ich könnte hier auch at verwenden. Das macht jetzt hier keinen Unterschied, de-de oder de-at, weil wir ja hier in dieser Darstellungsform gleiche Formate verwenden. Ich führe jetzt einmal diese Beispielanweisung aus, und wir sehen wir bekommen jetzt hier auch wieder, natürlich als Text in dieser Form, das Datum sauber formatiert. So wie wir es in unserer Darstellung gewohnt sind. Manchmal kann es natürlich auch hilfreich sein, ein Format detaillierter anzugeben, und das habe ich Ihnen in folgendem Beispiel vorbereitet. Ich möchte hier den Monatsnamen in Landessprache ausgeben, ähnlich wie wir es vorher mit DATENAME gesehen haben. Ich führe einmal diese Anweisung aus, damit wir das Ergebnis sehen, und erläutere Ihnen jetzt im Anschluss, was hier eigentlich passiert. Ich habe jetzt hier nicht mit einem d, wie vorhin, generell gesagt ich möchte ein Datum, sondern ich habe jetzt hier ein ganzes Format angegeben: d. - mit einem d, das heißt, ich möchte keine führenden Nullen hier verwenden, dann dass Monat ausgeschrieben wird, hier in vierstelliger M Angabe verwendet, und viermal das Y fürs Jahr. Und jetzt habe ich hier das Gleiche mit drei unterschiedlichen Culture Parametern verwendet: 'de-de' liefert Deutsch, 'de-at' prinzipiell auch deutsch, aber in leicht abgewandelter österreichischer Form - 'en-gb' als Britisch, und wenn wir uns die Ergebnisse betrachten, sehen wir jetzt zum Beispiel hier, für den ersten Monat des Jahres deutsch - Januar und in unserer österreichischen Form eben Jänner, das macht den Unterschied aus, ob ich hier de oder at verwende, die englische Form January in entsprechender Darstellung. Das heißt, ich kann hier zusätzlich - vor allem interessant für Texte wie die Monatsnamen, noch zusätzlich steuern in welcher Sprache sie dargestellt werden. Interessant ist auch die Formatierung von Währungsformaten. Dafür verwendet man zum Beispiel ein C, C für Currency, und jetzt habe ich hier drei Varianten zum Vergleich verwendet, 'de-de' liefert automatisch, das weiß das System, den Euro und das Euro-Symbol wird hinter dem Betrag, wie in Deutschland üblich, dargestellt. Mit 'en-gb' - gb Great Britain - bekomme ich die Pfund, und automatisch weiß das System, OK, hier brauche ich ein Pfund-Symbol und das muss vorne stehen. Mit 'en-us' verwende ich den US Dollar, der auch vorne dargestellt wird. Also, es gibt eine riesige Anzahl an Möglichkeiten, die mir die Formatfunktion liefert. Wenn Sie detaillierter Informationen haben möchten, markieren Sie einfach die Formatfunktion, drücken Sie auf die Taste F1 und Sie bekommen hier in der Onlinedokumentation, die genaue Syntax angezeigt, und da gibt es eine ganze Menge an Formaten und Einstellungen, die es hier auszuprobieren gilt. Ich wünsche Ihnen viel Spaß damit, wenn Sie noch andere Formatvarianten durchspielen. Sie können also schon bei älteren SQL Server Versionen mit der CONVERT Funktion ein Datum formatieren, wenn Sie einen Monats- oder Wochentagsnamen haben wollen, dann verwenden Sie immer schon die Funktion DATENAME mit den entsprechenden Parametern. Ab dem SQL Server 2012 können Sie umfangreiche Formatierungen über die neue Formatfunktion vornehmen, die Ihnen eine sehr umfangreiche Einflussnahme auf das Ergebnis ermöglicht. Achten Sie aber immer darauf, wenn Sie ein Datum formatieren, dann wird daraus ein Text, und Sie müssen dann darauf achten, wie Sie korrekt sortieren, damit die Sortierung nicht über den Text falsch dargestellt wird. Das Gleiche gilt zum Beispiel natürlich auch für numerische Beträge, für Geldbeträge.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

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!