SQL Server lagrar inte en DateTime
i valfritt strängformat - det lagras som ett numeriskt värde på 8 byte.
De olika inställningarna (språk, datumformat) påverkar bara hur DateTime
visas för dig i SQL Server Management Studio - eller hur den tolkas när du försöker konvertera en sträng till en DateTime
.
Det finns många format som stöds av SQL Server - se MSDN Books Online på CAST och KONVERTERA . De flesta av dessa format är beroende på vilka inställningar du har - därför kan dessa inställningar fungera ibland - och ibland inte.
Sättet att lösa detta är att använda ISO-8601-datumformatet som stöds av SQL Server - det här formatet fungerar alltid - oavsett dina inställningar för SQL Server-språk och datumformat.
ISO-8601-formatet stöds av SQL Server finns i två varianter:
YYYYMMDD
för bara datum (ingen tidsdel) - notera här:inga bindestreck! , det är väldigt viktigt!YYYY-MM-DD
är INTE oberoende av datumformatinställningarna i din SQL Server och kommer INTE fungera i alla situationer!
eller:
YYYY-MM-DDTHH:MM:SS
för datum och tider - notera här:detta format har bindestreck.
Detta gäller för SQL Server 2000 och senare.
Om du använder SQL Server 2008 och DATE
datatyp (endast DATE
- inte DATETIME
!), då kan du verkligen också använda YYYY-MM-DD
format och det fungerar också med alla inställningar i din SQL Server.
Fråga mig inte varför hela det här ämnet är så knepigt och lite förvirrande – det är bara så det är. Men med YYYYMMDD
format, bör du vara bra för alla versioner av SQL Server och för alla språk- och datumformatinställningar i din SQL Server.