sql >> Databasteknik >  >> RDS >> Sqlserver

Konverteringsfel vid konvertering av 'nvarchar' till 'datetime' i sql-servern

Det finns många format som stöds av SQL Server - se MSDN Books Online på 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.

Om du använder SQL Server 2008 eller senare 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.

Rekommendationen för SQL Server 2008 och nyare är att använda DATE om du bara behöver datumdelen och DATETIME2(n) när du behöver både datum och tid. Du bör försöka börja fasa ut DATETIME datatyp om möjligt



  1. Om du använder indexerade vyer och MERGE, läs detta!

  2. Aggregat datatabeller

  3. Hur ändrar jag MySQL Server tidszon?

  4. Vad är fördelen med att använda försök {} catch {} kontra om {} annat {}