Kiedy łączysz się z SQL Server, zwykle format daty jest określany przez Twój język. Domyślnym językiem sesji jest język logowania tej sesji, chyba że zostanie nadpisany na podstawie sesji za pomocą Open Database Connectivity (ODBC) lub interfejsów API OLE DB.
Ustawienie formatu daty wpływa na interpretację ciągów znaków, ponieważ są one konwertowane na wartości daty w celu przechowywania w bazie danych. Nie ma to wpływu na wyświetlanie wartości typu danych, które są przechowywane w bazie danych, ani na format przechowywania.
Pomimo faktu, że język sesji określa format daty, w razie potrzeby możesz zmienić format daty. Na przykład, jeśli Twoim językiem jest us_english
, format daty to mdy
(tak, że 07.01.2018 oznacza 1 lipca, a nie 7 stycznia). Możesz to zmienić, aby format daty to dmy
(lub w jakimkolwiek innym formacie), gdy język pozostaje us_english
.
Możesz użyć T-SQL do jawnego ustawienia formatu daty bieżącej sesji za pomocą SET DATEFORMAT
oświadczenie.
Składnia
Oto jak działa składnia:
SET DATEFORMAT { format | @format_var }
Gdzie format | @format_var
to kolejność części daty.
Prawidłowe wartości to mdy
, dmy
, ymd
, ydm
, myd
i dym
. Mogą to być zestawy znaków Unicode lub dwubajtowe (DBCS) przekonwertowane na Unicode.
Pamiętaj jednak, że ydm
nie jest obsługiwany dla data , data/godzina2 i przesunięcie daty i godziny typy danych.
Przykład
Zanim cokolwiek zmienimy, spójrzmy na obecne opcje użytkownika. Dzięki temu dowiemy się, jaki jest bieżący język i format daty (a także kilka innych rzeczy):
DBCC USEROPTIONS;
Wynik:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Widzimy, że językiem jest us_english
a format daty to mdy
(który jest domyślnym formatem daty dla tego języka).
Zmieńmy więc format daty, a następnie ponownie sprawdź opcje użytkownika:
SET DATEFORMAT dmy; DBCC USEROPTIONS;
Wynik:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Widzimy, że zmienił się format daty, a język pozostał ten sam.
Oto jak zmienić format daty bez zmiany języka. Jak wspomniano, jeśli zmienisz język, w tym samym czasie domyślnie ustawi się format daty. Jeśli to jest to, co chcesz zrobić, sprawdź Jak ustawić bieżący język w SQL Server (T-SQL).