SQL Server neukládá DateTime
v libovolném formátu řetězce – je uložen jako 8bajtová číselná hodnota.
Různá nastavení (jazyk, formát data) ovlivňují pouze způsob DateTime
se vám zobrazí v SQL Server Management Studio – nebo jak je analyzován, když se pokusíte převést řetězec na DateTime
.
SQL Server podporuje mnoho formátů – viz MSDN Books Online na CAST a KONVERT . 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 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 (bez časové části) – 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 má pomlčky.
To platí pro SQL Server 2000 a novější.
Pokud používáte SQL Server 2008 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.