Nếu bạn cần chỉ định ngày giờ bằng cách sử dụng chuỗi, bạn nên sử dụng an toàn , định dạng độc lập với ngôn ngữ.
Trong SQL Server, đó là định dạng ISO-8601 (được điều chỉnh một chút) và về cơ bản nó hỗ trợ hai định dạng an toàn cho DATETIME
luôn hoạt động - bất kể cài đặt ngôn ngữ, khu vực và định dạng ngày của bạn là gì:
YYYYMMDD (e.g. 20121231 for 31st of December 2012) if you need date only
YYYY-MM-DDTHH:mm:ss (e.g. 2012-12-31T21:05:00 for 31st of December 2012, 9:05pm)
Lưu ý:
-
định dạng chỉ ngày đầu tiên có không có dấu gạch ngang hoặc dấu phân cách!
-
định dạng thứ hai có dấu gạch ngang cho ngày (cũng có thể được bỏ qua) và có một
T
cố định làm dấu phân cách giữa ngày và phần thời gian của chuỗi
Cập nhật: theo nhận xét cuối cùng của bạn (về các ngôn ngữ mặc định khác nhau cho hai người dùng) - hãy thử điều này:
-- this is how your `SA` interprets the string as datetime....
SET LANGUAGE english
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Hoạt động tốt ...
-- this is how your British user interprets teh string as datetime
SET LANGUAGE british
SELECT CAST('2012-11-30 23:59' AS DATETIME)
Điều này cố gắng giải thích chuỗi là ngày 11 của tháng 30 năm 2012 và rõ ràng, điều đó không thành công ....