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

Konvertering mislykkedes ved konvertering af dato og/eller klokkeslæt fra tegnstreng, mens dato og klokkeslæt blev indsat

Der er mange formater, der understøttes af SQL Server - se MSDN Books Online om 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 understøttes 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.

Så i dit specifikke tilfælde - brug disse strenge:

insert into table1 values('2012-02-21T18:10:00', '2012-01-01T00:00:00');

og du burde have det fint (bemærk:du skal bruge den internationale 24-timers). format i stedet for 12-timers AM/PM-format for dette).

Alternativt :hvis du er på SQL Server 2008 eller nyere, kan du også bruge DATETIME2 datatype (i stedet for almindelig DATETIME ) og din nuværende INSERT ville bare fungere uden problemer! :-) DATETIME2 er meget bedre og meget mindre kræsen med hensyn til konverteringer - og det er i hvert fald de anbefalede datatyper for dato/klokkeslæt for SQL Server 2008 eller nyere.

SELECT
   CAST('02-21-2012 6:10:00 PM' AS DATETIME2),     -- works just fine
   CAST('01-01-2012 12:00:00 AM' AS DATETIME2)   -- works just fine  

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 fin til enhver version af SQL Server og for enhver sprog- og datoformatindstilling i din SQL Server.



  1. Sådan modelleres for nem databasevedligeholdelse

  2. Sådan opdaterer du data i en brugerdefineret dialog

  3. Retter ORA-65096-fejl ved oprettelse af automatiserede test i Django ved hjælp af Oracle

  4. Fejlkode:1215. Kan ikke tilføje fremmednøglebegrænsning (fremmednøgler)