SQL Server không lưu trữ DateTime
ở bất kỳ định dạng chuỗi nào - nó được lưu trữ dưới dạng giá trị số 8 byte.
Các cài đặt khác nhau (ngôn ngữ, định dạng ngày) chỉ ảnh hưởng đến cách DateTime
được hiển thị cho bạn trong SQL Server Management Studio - hoặc cách nó được phân tích cú pháp khi bạn cố gắng chuyển đổi một chuỗi thành DateTime
.
Có nhiều định dạng được SQL Server hỗ trợ - xem MSDN Sách Trực tuyến trên CAST và CHUYỂN ĐỔI . Hầu hết các định dạng đó đều phụ thuộc về những cài đặt bạn có - do đó, những cài đặt này đôi khi có thể hoạt động - và đôi khi không.
Cách giải quyết vấn đề này là sử dụng định dạng ngày ISO-8601 được SQL Server hỗ trợ - định dạng này luôn hoạt động luôn - bất kể cài đặt định dạng ngày và ngôn ngữ SQL Server của bạn.
Định dạng ISO-8601 được hỗ trợ bởi SQL Server có hai phiên bản:
-
YYYYMMDD
chỉ dành cho ngày tháng (không có phần thời gian) - lưu ý ở đây: không có dấu gạch ngang! , điều đó rất quan trọng!YYYY-MM-DD
là KHÔNG độc lập với cài đặt định dạng ngày trong SQL Server của bạn và sẽ KHÔNG hoạt động trong mọi tình huống!
hoặc:
-
YYYY-MM-DDTHH:MM:SS
cho ngày và giờ - lưu ý ở đây:định dạng này có dấu gạch ngang.
Điều này hợp lệ cho SQL Server 2000 và mới hơn.
Nếu bạn sử dụng SQL Server 2008 và DATE
kiểu dữ liệu (chỉ DATE
- không DATETIME
!), thì bạn thực sự cũng có thể sử dụng YYYY-MM-DD
và điều đó cũng sẽ hoạt động với bất kỳ cài đặt nào trong SQL Server của bạn.
Đừng hỏi tôi tại sao toàn bộ chủ đề này rất phức tạp và hơi khó hiểu - đó chỉ là cách của nó. Nhưng với YYYYMMDD
, bạn sẽ ổn đối với bất kỳ phiên bản SQL Server nào cũng như đối với bất kỳ cài đặt ngôn ngữ và định dạng ngày tháng nào trong SQL Server của bạn.