sql >> Databáze >  >> RDS >> Sqlserver

Převod se nezdařil při převodu data a/nebo času ze znakového řetězce při vkládání datetime

SQL Server podporuje mnoho formátů – viz MSDN Books Online o CAST a CONVERT. Většina těchto formátů je závislá na tom, jaká máte nastavení – proto mohou tato nastavení někdy fungovat – a někdy ne.

Způsob, jak to vyřešit, je použít (mírně upravený) formát data ISO-8601 který je podporován SQL Serverem – tento formát funguje vždy - bez ohledu na váš jazyk SQL Server a nastavení formátu data.

Formát ISO-8601 je podporován serverem SQL Server ve dvou variantách:

  • YYYYMMDD pouze pro data (žádná časová část); poznámka zde:žádné pomlčky! , to je velmi důležité! YYYY-MM-DD je NE nezávisle na nastavení formátu data na vašem serveru SQL a NE pracovat ve všech situacích!

nebo:

  • YYYY-MM-DDTHH:MM:SS pro data a časy – poznámka zde:tento formát pomlčky (ale mohou být vynechán) a pevné T jako oddělovač mezi datem a časem vašeho DATETIME .

Toto platí pro SQL Server 2000 a novější.

Takže ve vašem konkrétním případě - použijte tyto řetězce:

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

a měli byste být v pořádku (poznámka:musíte použít mezinárodní 24hodin spíše než 12hodinový formát AM/PM).

Alternativně :pokud používáte SQL Server 2008 nebo novější, můžete také použít DATETIME2 datový typ (místo prostého DATETIME ) a váš aktuální INSERT fungovalo by to bez problémů! :-) DATETIME2 je mnohem lepší a mnohem méně náročný na převody – a každopádně jde o doporučené datové typy data/času pro SQL Server 2008 nebo novější.

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  

Neptejte se mě, proč je celé toto téma tak ošemetné a poněkud matoucí – tak to prostě je. Ale s YYYYMMDD formátu, měli byste být v pořádku pro jakoukoli verzi SQL Server a pro jakékoli nastavení jazyka a formátu data na vašem serveru SQL.



  1. Začínáme s MariaDB pomocí Docker, Java Spring a JDBC

  2. Nelze ověřit, s možností novalidate

  3. drahokam mysql2 zkompilován pro špatnou klientskou knihovnu mysql

  4. Připojení PHP na Linuxu k Microsoft Access na Windows Share