|
Datumsformat auf dem SQL Server ermittlen und festlegen
Das Datumsformat das auf dem SQL Server verwendet wird,
hängt in erster Linie von der für die Verbindung zum Server gewählten Sprache ab. Beim Verbindungsaufbau über OLEdb oder ODBC
kann die gewünschte Sprache über die Option "Current Language" gesetzt werden.
z.B. verbindung.Properties("Current Language").value = "German"
Wurde keine Sprache beim
Verbindungsaufbau festgelegt, so verwendet der SQL Server die für den jeweiligen Benutzernamen
(Login) festgelegte Sprache. Um zum Beispiel die standardmäßig eingestellte Sprache für
den Benutzernamen "sa" zu ermitteln kann man die
gespeicherte Prozedur sp_helplogins verwenden:
Beispiel:
EXEC sp_helplogins "sa"
In der Spalte DefLangName wird dann die für den Benutzernamen "sa"
festgelegte Sprache angezeigt.
Beim Anlegen eines neuen Benutzernamens kann die Standardsprache jeweils
festgelegt werden (Entweder im Enterprise Manager oder über die gespeicherte
Prozedur sp_addlogin). Wird keine Sprache festgelegt, so wird die
Standardsprache des Servers verwendet.
Diese Einstellung kann über die gespeicherte Prozedur sp_configure mit
dem Parameter 'default language' abgefragt und natürlich auch neu gesetzt
werden. Um z.B. Deutsch als Standardsprache für Benutzernamen festzulegen kann
der Aufruf
EXEC sp_configure 'default language', 1 und
anschließendRECONFIGURE
ausgeführt werden. Eine Liste der "Sprach-Ids"
findet man, indem man die Tabelle syslanguages in der master-Datenbank
abfragt.
Ermitteln der Spracheinstellung für die aktuelle Verbindung
Die Spracheinstellung für die aktuelle Verbindung kann
leicht über die globale Variable @@LANGUAGE
abgefragt werden. Das Ergebnis ist eine
Zeichenkette, die die aktuelle Sprache enthält.
Ermitteln des Datumsformats für die aktuelle Sprache
Über die Abfrage SELECT dateformat FROM master..syslanguages WHERE name = @@LANGUAGE
erhalten Sie das Standard-Datumsformat für die Verbindung. Dieses Format legt
fest, in welcher Reihenfolge bei Datumswerten Tag, Monat und Jahr interpretiert
werden. Wurde die Sprache auf "deutsch" gesetzt, erhalten Sie z.B. den
Wert 'dmy'.
Beispiel:
SET LANGUAGE deutsch
SELECT dateformat FROM master..syslanguages WHERE name = @@LANGUAGE
SET LANGUAGE english
SELECT dateformat FROM master..syslanguages WHERE name = @@LANGUAGE |
Ergebnis:
Changed language setting to Deutsch.
dateformat
----------
dmy
Changed language setting to us_english.
dateformat
----------
mdy |
Das Ändern der Sprache hat aber nicht nur Auswirkungen auf die Reihenfolge
von Tag, Monat und Jahr bei der Interpretation von Datumswerten. Es werden auch
die entsprechenden Kurz- und Langnamen von Monaten und Wochentagen für die
entsprechende Sprache aktiviert. Falls Meldungen in der gewählten Sprache auf
dem Server vorhanden sind, werden diese ebenfalls im weiteren Verlauf der
Sitzung verwendet.
Beispiel:
SET LANGUAGE english
SELECT dateformat FROM master..syslanguages WHERE name = @@LANGUAGE
SELECT CONVERT(varchar(20), GetDate())
SELECT CONVERT(datetime, 'March 1 2000')
SET LANGUAGE deutsch
SELECT dateformat FROM master..syslanguages WHERE name = @@LANGUAGE
SELECT CONVERT(varchar(20), GetDate())
SELECT CONVERT(datetime, '1. März 2000')
|
Ergebnis:
Changed language setting to us_english.
--(Die Meldung erscheint in der ausgewählten Sprache)
mdy
--(Standarddatumsformat für Englisch)
Mar 9 2000 3:33PM
-- Für die Umwandlung wird der kurze Monatsname verwendet
1.3.2000 00:00:00
-- Eingaben werden entsprechend der Sprache interpretiert
Spracheneinstellung auf Deutsch geändert. --(Die Meldung erscheint
in der ausgewählten Sprache)
dmy
-- (Standarddatumsformat für deutsch)
Mär 9 2000 3:33PM
-- für die Umwandlung wird der kurze Monatsname der Sprache verwendet
1.3.2000 00:00:00 -- Eingaben werden entsprechend der Sprache interpretiert |
Neben der Spracheinstellung, kann auch noch die Option
DATEFORMAT verwendet
werden, um die Interpretation eines Datums zu verändern.
SET DATEFORMAT 'dmy' führt dazu, daß alle folgenden Datumsangaben während
der Verbindung im Format 'Tag, Monat, Jahr' interpretiert werden.
Diese Einstellung überschreibt das Standardformat der aktuellen
Spracheinstellung. Auch ein späterer Wechsel der Sprache, hebt diese
Einstellung nicht mehr auf.
| SQL Anweisung |
Ergebnis |
DECLARE @datevar datetime |
|
SET LANGUAGE deutsch |
Spracheneinstellung auf Deutsch geändert. |
SET @datevar = '2.1.1999' |
|
SELECT @datevar |
2.1.1999 00:00:00 |
SET DATEFORMAT 'mdy' |
|
SET @datevar = '2.1.1999' |
|
SELECT @datevar |
1.2.1999 00:00:00 |
SET LANGUAGE french |
Changed language setting to Français. |
SELECT dateformat FROM master..syslanguages WHERE name = @@LANGUAGE |
dmy |
SET @datevar = '2.1.1999' |
|
SELECT @datevar |
1.2.1999 00:00:00 |
Um zu prüfen, welches Datumsformat in der aktuellen
Sitzung tatsächlich verwendet wird, kann die Anweisung DBCC USEROPTIONS
verwendet werden.
Ergebnis:
textsize | 64512 |
language | us_english |
dateformat | mdy |
datefirst | 7 |
arithabort | SET |
ansi_null_dflt_on | SET |
ansi_warnings | SET |
ansi_padding | SET |
ansi_nulls | SET |
Die Zeile dateformat gibt das Datumsformat an.
|