Đó là mấu chốt của sự nhầm lẫn. Chỉ vì SQL Server Management Studio hiển thị cột ngày giờ ở định dạng đó không có nghĩa là nó được lưu trữ dưới dạng VĂN BẢN YYYY-MM-DD hh:mm:ss.zzz. Nó được lưu trữ dưới dạng nhị phân, giống như 0000101000001010 ..
Ngày của bạn được lưu trữ trong SQL Server dưới dạng một chuỗi các byte (bit thực sự) tạo nên một số giá trị số là phần bù từ 1900-01-01. Không có định dạng cố hữu cho ngày. Những gì bạn đang đề cập đến là SSMS theo mặc định hiển thị các cột ngày giờ [hiển thị] dưới dạng YYYY-MM-DD hh:mm:ss.zzz. Nếu bạn sử dụng công cụ lập trình front-end, điều đó cũng có thể áp đặt định dạng [hiển thị] mặc định trừ khi bạn yêu cầu một định dạng khác.
Hoàn toàn KHÔNG có cách nào để SSMS hiển thị dữ liệu ngày giờ ở định dạng khác thông qua các tùy chọn hoặc cấu hình. Nếu phải, bạn sẽ phải cập nhật truy vấn SQL để chuyển đổi cột ngày giờ thành cột VARCHAR có chứa TEXTual tương đương ở một định dạng cụ thể. Điều đó có thể hữu ích trong SSMS, nhưng sẽ không tốt khi được sử dụng làm nguồn dữ liệu cho các ứng dụng web / GUI giao diện người dùng - vì các giá trị không phải là datetime và không thể được sử dụng để tính toán khoảng thời gian, vẽ đồ thị, điều khiển ngày tháng, v.v.
Hãy xem ví dụ này về hiển thị thời gian (getdate ()) dưới dạng YYYY-DD-MM, một định dạng rất khác thường. Lưu ý rằng trường / biến ngày phải được sử dụng hai lần:
select stuff(convert(char(7), getdate(), 120), 5, 0, '-' + convert(char(2), getdate(), 3))