ISO-8601 untuk DATETIME
(tipe yang lebih lama) entah bagaimana "rusak" atau "diadaptasi" (tergantung pada apakah Anda melihatnya sebagai bug atau fitur) - Anda perlu menggunakan YYYYMMDD
(tanpa tanda hubung apa pun) untuk membuatnya berfungsi terlepas dari pengaturan bahasa.
Untuk DATE
atau DATETIME2(n)
tipe data, ini telah diperbaiki dan format ISO-8601 yang "tepat" YYYY-MM-DD
akan selalu ditafsirkan dengan benar.
-- 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');
Ini adalah kekhasan DATETIME
ketik (dan bukan satu-satunya....) - daftar saja, ketahui tentang itu - dan lanjutkan (artinya:jangan gunakan DATETIME
lagi - gunakan DATE
atau DATETIME2(n)
sebagai gantinya - jauh lebih baik untuk diajak bekerja sama!) :-)