Pokud potřebujete určit datum a čas pomocí řetězců, měli byste použít trezor , jazykově nezávislý formát.
V SQL Serveru je to formát ISO-8601 (mírně přizpůsobený) a podporuje v zásadě dva bezpečné formáty pro DATETIME
které vždy fungují – bez ohledu na váš jazyk, oblast a nastavení formátu data:
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
Poznámka:
-
první formát pouze pro datum nemá žádné pomlčky nebo oddělovače!
-
druhý formát obsahuje pomlčky pro datum (lze je také vynechat) a je tam pevné
T
jako oddělovač mezi datem a časovou částí řetězce
Aktualizace: podle vašeho posledního komentáře (o různých výchozích jazycích pro dva uživatele) - zkuste toto:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Funguje dobře...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Toto se pokouší interpretovat řetězec jako 11. den 30. měsíce roku 2012 a očividně to selže....