ISO-8601 dla DATETIME
(starszy typ) jest w jakiś sposób „zepsuty” lub „dostosowany” (w zależności od tego, czy patrzysz na to jako na błąd, czy jako funkcję) - musisz użyć YYYYMMDD
(bez wszelkie myślniki), aby działał niezależnie od ustawień języka.
Dla DATE
lub DATETIME2(n)
typy danych, zostało to naprawione i „właściwy” format ISO-8601 YYYY-MM-DD
zawsze będą poprawnie interpretowane.
-- 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');
To dziwactwo DATETIME
wpisz (a nie jedyny....) - po prostu zarejestruj go, wiedz o tym - i przejdź dalej (tzn. nie używaj DATETIME
już - użyj DATE
lub DATETIME2(n)
zamiast tego - dużo przyjemniej się z nim pracuje!) :-)