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:
YYYYMMDDpouze pro data (žádná časová část); poznámka zde:žádné pomlčky! , to je velmi důležité!YYYY-MM-DDje 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:SSpro data a časy – poznámka zde:tento formát má pomlčky (ale mohou být vynechán) a pevnéTjako oddělovač mezi datem a časem vašehoDATETIME.
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.