sql >> Database teknologi >  >> RDS >> Sqlserver

Umuligt at gemme bestemte dato- og tidsformater i SQL Server

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:

  • YYYYMMDD for kun datoer (ingen tidsdel) - bemærk her:ingen bindestreger! , det er meget vigtigt! YYYY-MM-DD er IKKE uafhængig af datoformatindstillingerne i din SQL Server og vil IKKE arbejde i alle situationer!

eller:

  • YYYY-MM-DDTHH:MM:SS for 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.



  1. Installer Azure Data Studio på Ubuntu 18.04

  2. Model Entity Framework mange-mange plus delt relation

  3. Hvorfor er XAMPP ikke egnet til produktion?

  4. Sådan konverteres en streng til en dato/tid i SQL Server ved hjælp af PARSE()