Có nhiều định dạng được SQL Server hỗ trợ - xem MSDN Books Online trên CAST
và CONVERT
. 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 điều chỉnh một chút) đượ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ỉ 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 (nhưng chúng có thể được bỏ qua) và mộtT
cố định làm dấu phân cách giữa phần ngày và giờ trongDATETIME
của bạn .
Đ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 trở lên 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 và đố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.
Khuyến nghị cho SQL Server 2008 và mới hơn là sử dụng DATE
nếu bạn chỉ cần phần ngày và DATETIME2(n)
khi bạn cần cả ngày và giờ. Bạn nên thử bắt đầu loại bỏ DATETIME
kiểu dữ liệu nếu có thể