Bei der Arbeit mit Datumsberechnungen im SQL-Server ist es wichtig zu verstehen, wie Spracheinstellungen die Ergebnisse beeinflussen. Sie haben Auswirkungen auf die Interpretation von Datumsangaben, die Durchführung von Berechnungen und die Darstellung von Wochentagen. In diesem Beitrag zeigen wir, wie die Spracheinstellungen im SQL-Server die Datumsberechnungen beeinflussen und wo sie konfiguriert werden können.
Spracheinstellungen im SQL-Server: Eine versteckte Kraft im Hintergrund
Sie mögen zwar unscheinbar erscheinen, aber die Spracheinstellungen im SQL-Server sind der Schlüssel, um das korrekte Datumsformat zu bestimmen, Datumsberechnungen zu interpretieren und auch Wochentage richtig zu berechnen. Jede Ebene der Spracheinstellungen hat ihre eigene Bedeutung und Priorität – es lohnt sich also, genauer hinzuschauen.
Ausgangspunkt
Die SQL-Server-Spracheinstellung legt die Standardsprache für den gesamten SQL-Server fest. Sie bestimmt das Datumsformat, die Darstellung von Währungen und andere regional unterschiedliche Informationen.
Beim Installieren des SQL-Servers wird eine Standardsprache festgelegt, die bei Bedarf geändert werden kann. Sie wirkt sich auf alle Datenbanken und Benutzer aus, die den Server verwenden. Bei der Änderung der Standardsprache sollte man sich daher der Konsequenzen bewusst sein.
Die aktuelle Spracheinstellung ist in den Servereigenschaften im Reiter „Allgemein“ direkt ersichtlich.
Eine Änderung der Standardsprache erfolgt im Reiter „Erweitert“.
Die Eigenheiten einer Datenbank
Jede Datenbank im SQL-Server kann zudem ihre eigene Spracheinstellung haben, unabhängig von der Server-Spracheinstellung. Die Datenbank-Spracheinstellung beeinflusst die Interpretation von Datums- und Zeitangaben sowie die Darstellung lokalisierter Werte nur in dieser Datenbank. Sie kann entweder beim Erstellen der Datenbank festgelegt oder später geändert werden. Auch hier sollten die Folgen der Änderung der Spracheinstellung vorab bedacht werden.
Die Standardsprache einer neuen Datenbank wird im Default von der Server-Spracheinstellung übernommen. Damit wird eine konsistente Standardsprache auf Serverebene sichergestellt, um den Verwaltungsaufwand zu reduzieren. Soll für eine Datenbank eine abweichende Spracheinstellung getroffen werden, ist das möglich über die Datenbankeigenschaften im Reiter „Optionen“. Wichtig hierbei ist, dass der Eigenständigkeitstyp der Datenbank auf „Teilweise“ gesetzt werden muss, sonst ist keine Änderung der Standardsprache möglich.
Bleibt der Eigenständigkeitstyp auf „Keine“, bewirkt eine Änderung der Server-Spracheinstellung auch eine Änderung der Standardsprache der Datenbank. Beim Eigenständigkeitstyp „Teilweise“ gilt die separate Einstellung der Datenbank unabhängig davon, was serverseitig verändert wird.
Individualität für Benutzer
Die Spracheinstellung der Anmeldung legt die Standardsprache für jeden Benutzer oder jede Anmeldung (Login) auf dem SQL-Server fest. Sie kann von den Server- oder Datenbank-Spracheinstellungen abweichen und je Benutzer bzw. je Anmeldung unterschiedlich sein. Die Standardsprache für den Login wird beim Anlegen der Anmeldung festgelegt und kann im Nachhinein geändert werden. Die Einstellung erfolgt in den Anmeldungseigenschaften im Reiter „Allgemein“.
Die Standardsprache eines bereits angelegten Benutzers wird damit nicht automatisch geändert, wenn die Server-Spracheinstellung geändert wird, sondern muss gesondert überprüft und angepasst werden.
Wird keine abweichende Einstellung getroffen, erhält die Anmeldung die zu diesem Zeitpunkt gültige Spracheinstellung des Servers als Standardsprache. Beim erneuten Öffnen des Eigenschaftsfensters ist diese auch explizit angegeben.
Flexibilität für spezifische Abfragen
Wenn eine Abfrage ausgeführt wird und keine explizite Spracheinstellung angegeben ist, verwendet der SQL-Server immer die Spracheinstellung des Benutzers, der die Abfrage ausführt. Die Abfragespracheinstellung kann jedoch mithilfe der Option “SET LANGUAGE” innerhalb einer Abfrage geändert werden, um vorübergehend die Sprache für diese spezifische Abfrage anzupassen.
SET LANGUAGE German;
SET LANGUAGE English;
Die „SET LANGUAGE“ Anweisung gilt nur für die einzelne Abfrage und hat keine Auswirkungen auf die entsprechenden Spracheinstellungen auf Server-, Datenbank- oder Anmeldungsebene.
Die Auswirkungen auf Datumsberechnungen
Nach Klärung der einzelnen Optionen und Ebenen bei der Spracheinstellung interessiert uns nun, wie diese Spracheinstellungen unsere Datumsberechnungen beeinflussen? Das Datumsformat, das Interpretieren von Datums- und Zeitangaben bei Berechnungen und sogar die Berechnung von Wochentagen sind stark von den Spracheinstellungen abhängig. Durch die korrekte Konfiguration dieser Einstellungen können wir sicherstellen, dass unsere Datumsberechnungen akkurat und einheitlich sind.
Datumsformat
Die Spracheinstellungen beeinflussen das Datumsformat, insbesondere die Reihenfolge der Datumsbestandteile (Tag, Monat, Jahr) sowie die Verwendung von Trennzeichen. Wenn also ein Textfeld in ein Datum konvertiert werden soll, ergibt sich unter Ausführung derselben Abfrage ein unterschiedliches Datumsformat. Ein einfaches Beispiel hierfür wäre dieses:
DECLARE @date varchar(10)
SET @date = '12-07-2023'
SELECT
CONVERT(date, @date) AS Datum
Ausgeführt unter einer Anmeldung mit der Standardsprache „Deutsch“, wird folgendes Ergebnis erzielt:
Wenn derselbe Code unter englischer Spracheinstellung ausgeführt wird, egal ob gesteuert durch die Anmeldung oder den „SET LANGUAGE“-Befehl, ergibt sich folgendes Bild:
Bei Datumsfeldern mit Tagen ab dem 13. des Monats wird in dieser Abfrage mit der englischen Spracheinstellung eine Fehlermeldung generiert werden.
Datumsberechnungen
Die Spracheinstellungen spielen auch eine Rolle bei der Durchführung von Datumsberechnungen wie Additionen oder Subtraktionen oder der Ermittlung von Zeitabständen zwischen zwei Datumsfeldern. Wenn beispielsweise ein Monat von einem Datum subtrahiert wird, verwendet der SQL-Server die Spracheinstellungen, um zu bestimmen, welcher Teil des Datums als Tag, Monat oder Jahr interpretiert wird. Eine Änderung der Spracheinstellungen kann daher zu unterschiedlichen Ergebnissen bei Datumsberechnungen führen.
Fügen wir dem obigen Beispiel also noch eine Spalte hinzu, um herauszufinden, welchen Teil des Datums der SQL-Server als Monat interpretiert:
DECLARE @date varchar(10)
SET @date = '12-07-2023'
SELECT
CONVERT(date, @date) AS Datum
,MONTH(@date) AS Monat
Im Ergebnis sehen wir, dass mit der deutschen Einstellung das Datum im Juli liegt, mit der englischen im Dezember.
Weichen die Spracheinstellungen unterschiedlicher Nutzer bzw. Anmeldungen voneinander ab, kann auch über eine einheitliche Datumskonvertierung in der Abfrage sichergestellt werden, dass alle Funktionen der Datumsberechnungen auch für alle User korrekt funktionieren. Über den dritten (optionalen) Parameter der CONVERT-Funktion kann im SQL-Server der Stil, in den das Datumsfeld umgewandelt werden soll, länderspezifisch angepasst werden (Details hierzu finden sich auf Microsoft Learn).
Wochentagsberechnungen
Die Spracheinstellungen beeinflussen auch die Berechnung von Wochentagen. In einigen Ländern beginnt die Woche am Sonntag, während sie in anderen Ländern am Montag beginnt. Die Spracheinstellungen im SQL-Server bestimmen, welcher Tag als erster Tag der Woche betrachtet wird. Ein Beispiel: der 10. Juli 2023 ist ein Montag. Für den SQL-Server mit deutscher Spracheinstellung ist die ermittelte Wochentagszahl die 1, mit englischer Spracheinstellung die 2.
Dieses Verhalten ist vor allem relevant, wenn nur bestimmte Wochentage in Auswertungen berücksichtigt werden sollen. Auch ein CONVERT in das entsprechende länderspezifische Datumsformat hat keine Auswirkung auf die Zählweise der Wochentage, daher sollte hier immer überprüft werden, ob das Ergebnis der Abfrage mit den erwarteten Werten übereinstimmt.
Fazit
Die Spracheinstellungen im SQL-Server können auf verschiedenen Ebenen festgelegt werden. Die Server-Spracheinstellung beeinflusst den gesamten Server. Die Datenbank-Spracheinstellung kann davon abweichend konfiguriert werden. Die Spracheinstellung der Anmeldung bietet individualisierte Einstellungen für Benutzer, und die Abfragespracheinstellung ermöglicht Flexibilität auf Abfrageebene. Wenn keine spezifische Abfragesprache eingestellt ist, wird immer die Standardsprache der Anmeldung angewendet, unter deren Kontext die Abfrage ausgeführt wird.
Die für die Abfrage geltende Sprache entscheidet auch darüber, wie das Datumsformat dargestellt wird, wie einzelne Datumsbestandteile interpretiert werden und wie die Berechnung der Wochentage erfolgt. Daher ist es von großer Bedeutung, die Spracheinstellungen im SQL-Server richtig zu konfigurieren, um sicherzustellen, dass alle Datumslogiken zuverlässig berechnet werden. Für reine Datumsberechnungen ist auch die Verwendung des dritten Parameters in der CONVERT-Funktion gut geeignet, um jederzeit eindeutige Ergebnisse zu erhalten, für die Zählweise der Wochentage muss allerdings die Spracheinstellung selbst geprüft werden.