ISO-8601 för DATETIME
(den äldre typen) är på något sätt "trasig" eller "anpassad" (beroende på om du ser den som en bugg eller funktion) - du måste använda YYYYMMDD
(utan några streck) för att få det att fungera oavsett språkinställningarna.
För DATE
eller DATETIME2(n)
datatyper, detta har åtgärdats och det "korrekta" ISO-8601-formatet YYYY-MM-DD
kommer alltid att tolkas korrekt.
-- 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');
Det är en egenhet av DATETIME
skriv (och inte den enda...) - registrera det, vet om det - och gå vidare (vilket betyder:använd inte DATETIME
längre - använd DATE
eller DATETIME2(n)
istället - mycket trevligare att jobba med!) :-)