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

Chyba převodu při převodu „nvarchar“ na „datetime“ na serveru SQL

SQL Server podporuje mnoho formátů – viz MSDN Books Online na CAST a CONVERT . Většina těchto formátů je závislá podle toho, jaká nastavení máte – 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 SQL Serverem a je dodáván ve dvou variantách:

  • YYYYMMDD pouze pro data (žádná časová část); poznámka zde:bez pomlček! , 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 částí data a času DATETIME .

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

Pokud používáte SQL Server 2008 nebo novější a DATE datový typ (pouze DATE - ne DATETIME !), pak můžete skutečně použít také YYYY-MM-DD formát a to bude fungovat také s jakýmkoli nastavením na vašem serveru SQL.

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 SQL Serveru.

Doporučení pro SQL Server 2008 a novější je použít DATE pokud potřebujete pouze část data, a DATETIME2(n) když potřebujete datum i čas. Měli byste se pokusit začít postupně vyřazovat DATETIME datový typ, pokud je to možné



  1. Smazat rodiče, pokud na něj neodkazuje žádný jiný potomek

  2. 'fetch' v CHOP získá pouze jeden výsledek

  3. SQL Server ekvivalent TO_CHAR a převod formátu

  4. Spusťte SQL z dávkového souboru