Subtile Unterschiede bei der Verarbeitung des Datums beim SQL Server
 

Wenn beim SQL Server mit Datum in unterschiedlichen Sprachen gearbeitet wird, so sollte grundsätzlich das Datumsformat 'JJJJMMTT' verwendet werden. In diesem Format sind keine Trennzeichen vorhanden.
 
Damit wird sichergestellt, dass das Datum in allen Sprachvarianten gleich erkannt wird.


SQL Server 2000 SP 4
declare @Datum varchar(10)
set @Datum = '20051201'
 

SQLBefehl Ergebnis Monatsname
set language 'us_english'
select cast(@Datum as datetime) as 'us_english', Datename(month,@Datum)
2005-12-01 00:00:00.000 December
set language 'Deutsch'
select cast(@Datum as datetime) as 'Deutsch', Datename(month,@Datum)
2005-12-01 00:00:00.000 Dezember
set language 'British'
select cast(@Datum as datetime) as 'British', Datename(month,@Datum)
2005-12-01 00:00:00.000 December

set @Datum = '2005-12-01'

SQLBefehl Ergebnis Monatsname
set language 'us_english'select cast(@Datum as datetime) as 'us_english', Datename(month,@Datum) 2005-12-01 00:00:00.000 December
set language 'Deutsch'
select cast(@Datum as datetime) as 'Deutsch', Datename(month,@Datum)
2005-01-12 00:00:00.000 Januar
set language 'British'
select cast(@Datum as datetime) as 'British', Datename(month,@Datum)
2005-01-12 00:00:00.000 December

SQL Server 2005 CTP 15

declare @Datum varchar(10)
set @Datum = '20051201'
 
SQLBefehl Ergebnis Monatsname
set language 'us_english'
select cast(@Datum as datetime) as 'us_english', Datename(month,@Datum)
2005-12-01 00:00:00.000 December
set language 'Deutsch'
select cast(@Datum as datetime) as 'Deutsch', Datename(month,@Datum)
2005-12-01 00:00:00.000 Dezember
set language 'British'
select cast(@Datum as datetime) as 'British', Datename(month,@Datum)
2005-12-01 00:00:00.000 December

set @Datum = '2005-12-01'

SQLBefehl Ergebnis Monatsname
set language 'us_english'
select cast(@Datum as datetime) as 'us_english', Datename(month,@Datum)
2005-12-01 00:00:00.000 December
set language 'Deutsch'
select cast(@Datum as datetime) as 'Deutsch', Datename(month,@Datum)
2005-01-12 00:00:00.000 Januar
set language 'British'
select cast(@Datum as datetime) as 'British', Datename(month,@Datum)
2005-01-12 00:00:00.000 January

SQL Script für die Abfrage

declare @Datum varchar(10)
set @Datum = '20051201'
--------------
set language 'us_english'
select cast(@Datum as datetime) as 'us_english', Datename(month,@Datum)
set language 'Deutsch'
select cast(@Datum as datetime) as 'Deutsch', Datename(month,@Datum)
set language 'British'
select cast(@Datum as datetime) as 'British', Datename(month,@Datum)
--------------
set @Datum = '2005-12-01'
--------------
set language 'us_english'
select cast(@Datum as datetime) as 'us_english', Datename(month,@Datum)
set language 'Deutsch'
select cast(@Datum as datetime) as 'Deutsch', Datename(month,@Datum)
set language 'British'
select cast(@Datum as datetime) as 'British', Datename(month,@Datum)