SQL Server gemmer ikke en DateTime i ethvert strengformat - det er gemt som en 8 byte numerisk værdi.
De forskellige indstillinger (sprog, datoformat) påvirker kun hvordan DateTime vises til dig i SQL Server Management Studio - eller hvordan det parses, når du forsøger at konvertere en streng til en DateTime .
Der er mange formater, der understøttes af SQL Server - se MSDN Books Online på CAST og KONVERTER . De fleste af disse formater er afhængige på hvilke indstillinger du har - derfor kan disse indstillinger fungere nogle gange - og nogle gange ikke.
Måden at løse dette på er at bruge ISO-8601-datoformatet der understøttes af SQL Server - dette format fungerer altid - uanset dit SQL Server-sprog og indstillinger for datoformat.
ISO-8601-formatet er understøttet af SQL Server kommer i to varianter:
YYYYMMDDfor kun datoer (ingen tidsdel) - bemærk her:ingen bindestreger! , det er meget vigtigt!YYYY-MM-DDer IKKE uafhængig af datoformatindstillingerne i din SQL Server og vil IKKE arbejde i alle situationer!
eller:
YYYY-MM-DDTHH:MM:SSfor datoer og tidspunkter - bemærk her:dette format har tankestreger.
Dette er gyldigt for SQL Server 2000 og nyere.
Hvis du bruger SQL Server 2008 og DATE datatype (kun DATE - ikke DATETIME !), så kan du faktisk også bruge YYYY-MM-DD format, og det vil også fungere med alle indstillinger i din SQL Server.
Spørg mig ikke, hvorfor hele dette emne er så vanskeligt og noget forvirrende – sådan er det bare. Men med YYYYMMDD format, bør du være i orden for enhver version af SQL Server og for enhver sprog- og datoformatindstilling i din SQL Server.