ISO-8601 for DATETIME
(den ældre type) er på en eller anden måde "brudt" eller "tilpasset" (afhængigt af om du ser på det som en fejl eller en funktion) - du skal bruge YYYYMMDD
(uden eventuelle bindestreger) for at få det til at fungere uanset sprogindstillingerne.
For DATE
eller DATETIME2(n)
datatyper, dette er blevet rettet og det "korrekte" ISO-8601-format YYYY-MM-DD
vil altid blive fortolket 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 er et særpræg ved DATETIME
skriv (og ikke den eneste...) - bare registrer det, kend til det - og gå videre (betyder:brug ikke DATETIME
længere - brug DATE
eller DATETIME2(n)
i stedet - meget pænere at arbejde med!) :-)