sql >> Databasteknik >  >> RDS >> Sqlserver

Konverteringen misslyckades vid konvertering av datum och/eller tid från teckensträng när datum och tid infogades

Det finns många format som stöds av SQL Server - se MSDN Books Online om CAST och CONVERT. 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 det (något anpassade) 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 (men de kan utelämnas), och en fast T som avgränsare mellan datum- och tidsdelen av din DATETIME .

Detta gäller för SQL Server 2000 och senare.

Så i ditt specifika fall - använd dessa strängar:

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

och du borde klara dig (obs:du måste använda den internationella 24-timmars). format snarare än 12-timmars AM/PM-format för detta).

Alternativt :om du använder SQL Server 2008 eller nyare kan du också använda DATETIME2 datatyp (istället för vanlig DATETIME ) och din nuvarande INSERT skulle bara fungera utan problem! :-) DATETIME2 är mycket bättre och mycket mindre kräsen när det gäller konverteringar - och det är de rekommenderade datatyperna för datum/tid för SQL Server 2008 eller senare i alla fall.

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  

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. Ställer in application_name på Postgres/SQLAlchemy

  2. Entity Framework skapar ett tabellnamn i plural, men vyn förväntar sig ett singular tabellnamn?

  3. Delad funktion motsvarande i T-SQL?

  4. om min tabell har 4 kolumner och jag vill hämta den tredje kolumnen vad gör jag.