Khi bạn kết nối với SQL Server, thường thì định dạng ngày tháng được xác định bởi ngôn ngữ của bạn. Ngôn ngữ mặc định cho một phiên là ngôn ngữ cho thông tin đăng nhập của phiên đó, trừ khi được ghi đè trên cơ sở mỗi phiên bằng cách sử dụng API OLE DB API hoặc Kết nối cơ sở dữ liệu mở (ODBC).
Cài đặt định dạng ngày ảnh hưởng đến việc diễn giải các chuỗi ký tự khi chúng được chuyển đổi thành các giá trị ngày tháng để lưu trữ trong cơ sở dữ liệu. Nó không ảnh hưởng đến việc hiển thị các giá trị kiểu dữ liệu ngày tháng được lưu trữ trong cơ sở dữ liệu hoặc định dạng lưu trữ.
Mặc dù thực tế là ngôn ngữ phiên của bạn xác định định dạng ngày, bạn có thể ghi đè định dạng ngày nếu cần. Ví dụ:nếu ngôn ngữ của bạn là us_english
, định dạng ngày sẽ là mdy
(sao cho 07/01/2018 đại diện cho ngày 1 tháng 7 chứ không phải ngày 7 tháng 1). Bạn có thể thay đổi điều này để định dạng ngày là dmy
(hoặc bất kỳ định dạng nào khác) trong khi ngôn ngữ vẫn là us_english
.
Bạn có thể sử dụng T-SQL để đặt định dạng ngày của phiên hiện tại một cách rõ ràng bằng cách sử dụng SET DATEFORMAT
tuyên bố.
Cú pháp
Đây là cách thực hiện cú pháp:
SET DATEFORMAT { format | @format_var }
Định dạng format | @format_var
là thứ tự của các phần ngày.
Các giá trị hợp lệ là mdy
, dmy
, ymd
, ydm
, myd
và dym
. Đây có thể là Unicode hoặc bộ ký tự byte kép (DBCS) được chuyển đổi sang Unicode.
Tuy nhiên, lưu ý rằng ydm
không được hỗ trợ cho ngày , datetime2 và datetimeoffset kiểu dữ liệu.
Ví dụ
Trước khi chúng tôi thay đổi bất kỳ điều gì, hãy xem xét các tùy chọn người dùng hiện tại. Điều này sẽ cho chúng tôi biết ngôn ngữ hiện tại là gì và định dạng ngày tháng (cũng như một số thứ khác):
DBCC USEROPTIONS;
Kết quả:
+-------------------------+----------------+ | Set Option | Value | |-------------------------+----------------| | textsize | -1 | | language | us_english | | dateformat | mdy | | datefirst | 7 | | lock_timeout | 5000 | | quoted_identifier | SET | | arithabort | SET | | ansi_null_dflt_on | SET | | ansi_warnings | SET | | ansi_padding | SET | | ansi_nulls | SET | | concat_null_yields_null | SET | | isolation level | read committed | +-------------------------+----------------+
Chúng ta có thể thấy rằng ngôn ngữ là us_english
và định dạng ngày là mdy
(là định dạng ngày mặc định cho ngôn ngữ đó).
Vì vậy, hãy thay đổi định dạng ngày, sau đó kiểm tra lại các tùy chọn của người dùng:
SET DATEFORMAT dmy; DBCC USEROPTIONS;
Kết quả:
+-------------------------+----------------+ | Set Option | Value | |-------------------------+----------------| | textsize | -1 | | language | us_english | | dateformat | dmy | | datefirst | 7 | | lock_timeout | 5000 | | quoted_identifier | SET | | arithabort | SET | | ansi_null_dflt_on | SET | | ansi_warnings | SET | | ansi_padding | SET | | ansi_nulls | SET | | concat_null_yields_null | SET | | isolation level | read committed | +-------------------------+----------------+
Và chúng ta có thể thấy rằng định dạng ngày đã thay đổi, trong khi ngôn ngữ vẫn giữ nguyên.
Vì vậy, đây là cách thay đổi định dạng ngày tháng mà không cần thay đổi ngôn ngữ. Như đã đề cập, nếu bạn thay đổi ngôn ngữ, nó sẽ ngầm định định dạng ngày tháng cùng một lúc. Nếu đó là những gì bạn muốn làm, hãy xem Cách đặt ngôn ngữ hiện tại trong SQL Server (T-SQL).