ISO-8601 cho DATETIME
(loại cũ hơn) bằng cách nào đó "bị hỏng" hoặc "được điều chỉnh" (tùy thuộc vào việc bạn xem nó như một lỗi hay một tính năng) - bạn cần sử dụng YYYYMMDD
( không có bất kỳ dấu gạch ngang nào) để làm cho nó hoạt động bất kể cài đặt ngôn ngữ.
Cho DATE
hoặc DATETIME2(n)
kiểu dữ liệu, điều này đã được sửa và định dạng ISO-8601 "thích hợp" YYYY-MM-DD
sẽ luôn được diễn giải một cách chính xác.
-- 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');
Đó là một điều kỳ quặc của DATETIME
nhập (và không phải là duy nhất ....) - chỉ cần đăng ký, biết về nó - và tiếp tục (nghĩa là:không sử dụng DATETIME
nữa - sử dụng DATE
hoặc DATETIME2(n)
thay vào đó - tốt hơn nhiều để làm việc với!) :-)