ISO-8601 pro DATETIME
(starší typ) je nějak "rozbitý" nebo "přizpůsobený" (podle toho, zda se na to díváte jako na chybu nebo funkci) - musíte použít YYYYMMDD
(bez jakékoli pomlčky), aby fungoval bez ohledu na nastavení jazyka.
Pro DATE
nebo DATETIME2(n)
datové typy, toto bylo opraveno a "správný" formát ISO-8601 YYYY-MM-DD
bude vždy správně interpretováno.
-- OK because of "adapted" ISO-8601
SET LANGUAGE GERMAN;
DECLARE @dt DATETIME='20170113';
SELECT @dt;
SELECT CAST('20170113' AS DATETIME);
SELECT CONVERT(DATETIME, '20170113');
-- OK because of DATETIME2(n)
SET LANGUAGE GERMAN;
DECLARE @dt2 DATETIME2(0) = '2017-01-13';
SELECT @dt2;
SELECT CAST('2017-01-13' AS DATETIME2(0));
SELECT CONVERT(DATETIME2(0), '2017-01-13');
Je to zvláštnost DATETIME
zadejte (a ne jediný....) - stačí jej zaregistrovat, vědět o něm - a jít dál (to znamená:nepoužívejte DATETIME
dále - použijte DATE
nebo DATETIME2(n)
místo toho - mnohem hezčí pracovat!) :-)