L'ISO-8601 pour DATETIME
(l'ancien type) est en quelque sorte "cassé" ou "adapté" (selon que vous le considérez comme un bogue ou une fonctionnalité) - vous devez utiliser YYYYMMDD
(sans tous les tirets) pour le faire fonctionner indépendamment des paramètres de langue.
Pour DATE
ou le DATETIME2(n)
les types de données, cela a été corrigé et le "bon" format ISO-8601 YYYY-MM-DD
sera toujours interprété correctement.
-- 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');
C'est une bizarrerie du DATETIME
tapez (et pas le seul ....) - enregistrez-le simplement, sachez-le - et passez à autre chose (ce qui signifie :n'utilisez pas DATETIME
plus - utilisez DATE
ou DATETIME2(n)
à la place - beaucoup plus agréable à travailler !) :-)