L'ISO-8601 per DATETIME
(il tipo precedente) è in qualche modo "rotto" o "adattato" (a seconda che lo consideri un bug o una funzionalità) - devi usare YYYYMMDD
(senza eventuali trattini) per farlo funzionare indipendentemente dalle impostazioni della lingua.
Per DATE
o il DATETIME2(n)
tipi di dati, questo è stato corretto e il formato ISO-8601 "corretto" YYYY-MM-DD
sarà sempre interpretato correttamente.
-- 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');
È una stranezza del DATETIME
digita (e non l'unico....) - registrati, conoscilo - e vai avanti (significato:non usare DATETIME
più - usa DATE
o DATETIME2(n)
invece - molto più bello lavorare con!) :-)