ISO-8601 за DATETIME
(по-старият тип) е по някакъв начин "счупен" или "адаптиран" (в зависимост от това дали го разглеждате като грешка или функция) - трябва да използвате YYYYMMDD
(без всякакви тирета), за да работи независимо от езиковите настройки.
За DATE
или DATETIME2(n)
типове данни, това е коригирано и "правилният" ISO-8601 формат YYYY-MM-DD
винаги ще се тълкува правилно.
-- 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');
Това е странност на DATETIME
въведете (и не единствения....) - просто го регистрирайте, знайте за него - и продължете напред (което означава:не използвайте DATETIME
вече - използвайте DATE
или DATETIME2(n)
вместо това - много по-приятна за работа!) :-)