O ISO-8601 para
DATETIME
(o tipo mais antigo) está de alguma forma "quebrado" ou "adaptado" (dependendo se você o vê como um bug ou um recurso) - você precisa usar YYYYMMDD
(sem quaisquer traços) para fazê-lo funcionar independentemente das configurações de idioma. Para
DATE
ou o DATETIME2(n)
tipos de dados, isso foi corrigido e o formato ISO-8601 "adequado" YYYY-MM-DD
sempre será interpretado corretamente. -- 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');
É uma peculiaridade do
DATETIME
digite (e não o único....) - apenas registre, saiba disso - e siga em frente (significado:não use DATETIME
mais - use DATE
ou DATETIME2(n)
em vez disso - muito mais agradável de trabalhar!) :-)