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

Konverteringsfejl ved konvertering af 'nvarchar' til 'datetime' i sql-serveren

Der er mange formater, der understøttes af SQL Server - se MSDN Books Online på CAST og CONVERT . 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 det (lidt tilpassede) ISO-8601 datoformat 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 kun for 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 bindestreger (men de kan). udelades), og en fast T som afgrænsning mellem dato- og tidsdelen af ​​din DATETIME .

Dette er gyldigt for SQL Server 2000 og nyere.

Hvis du bruger SQL Server 2008 eller nyere 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.

Anbefalingen for SQL Server 2008 og nyere er at bruge DATE hvis du kun skal bruge datodelen og DATETIME2(n) når du har brug for både dato og klokkeslæt. Du bør prøve at begynde at udfase DATETIME datatype, hvis det nogensinde er muligt



  1. ønskede at få alle datoer i mysql resultat

  2. Piping mysqldump til mysql

  3. Kombiner to MYSQL SELECT-forespørgsler

  4. 2 måder at returnere ASCII-koden for en given karakter i MariaDB