sql >> Databasteknik >  >> RDS >> Sqlserver

Omöjligt att lagra vissa datetime-format i SQL Server

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.



  1. Docker postgres kör inte init-fil i docker-entrypoint-initdb.d

  2. PLS-00103:Påträffade symbolen END när man förväntade sig + &=etc

  3. postgresql - ersätt alla instanser av en sträng i textfält

  4. Krävd cte-implementering för hierarkisk data