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
Tcố đị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 ....