Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak znaleźć format daty używany w bieżącej sesji w SQL Server (T-SQL)

Podczas korzystania z SQL Server bieżące połączenie zawiera szereg opcji, które określają takie rzeczy, jak język, formaty dat itp. Można je ustawić niezależnie od wartości domyślnych, ale można je również zastąpić podczas sesji za pomocą USTAW oświadczenie.

Format daty wpływa na interpretację ciągów znaków, ponieważ są one konwertowane na wartości dat do przechowywania w bazie danych. Gdy język jest ustawiony za pomocą USTAW JĘZYK , ustawienie formatu daty jest odpowiednio ustawione niejawnie. Można to wyraźnie zmienić za pomocą SET DATEFORMAT oświadczenie.

W każdym razie możesz znaleźć bieżący format daty, używając DBCC USEROPTIONS Komenda. To polecenie zwraca SET opcje, które zostały ustawione dla bieżącego połączenia.

Składnia

Składnia wygląda tak:

DBCC USEROPTIONS  
[ WITH NO_INFOMSGS ]

Opcjonalny NO_INFOMSGS argument blokuje wszystkie komunikaty informacyjne o poziomach ważności od 0 do 10.

Przykład

Oto przykład uruchomienia polecenia i wyniki, które otrzymuję na mojej obecnej maszynie testowej:

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 |
+-------------------------+----------------+

Jak wspomniano, możesz zmienić te opcje za pomocą SET oświadczenia.

Oto przykład zmiany języka w bieżącej sesji, a następnie ponownego uruchomienia polecenia:

SET LANGUAGE German;
DBCC USEROPTIONS;

Wynik:

+-------------------------+----------------+
| Set Option              | Value          |
|-------------------------+----------------|
| textsize                | -1             |
| language                | Deutsch        |
| dateformat              | dmy            |
| datefirst               | 1              |
| 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 |
+-------------------------+----------------+
Die Spracheneinstellung wurde in Deutsch geändert.

Widzimy więc, że zmienił się nie tylko język, ale także zmienił się format daty.

Jeśli jednak nie jest to pożądany format daty, format daty można jawnie zmienić za pomocą SET DATEFORMAT .

Tak:

SET DATEFORMAT mdy;
DBCC USEROPTIONS;

Wynik:

+-------------------------+----------------+
| Set Option              | Value          |
|-------------------------+----------------|
| textsize                | -1             |
| language                | Deutsch        |
| dateformat              | mdy            |
| datefirst               | 1              |
| 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 format daty został zmieniony zgodnie ze specyfikacją, pozostawiając język bez zmian.

Widok sys.dm_exec_requests

Możesz również zwrócić format daty używany w bieżącym żądaniu, wysyłając zapytanie do sys.dm_exec_requests widok systemu. Ten widok zwraca całkiem sporo kolumn, ale możesz zawęzić je tylko do tych, którymi jesteś zainteresowany. W naszym przypadku interesuje nas tylko jedna kolumna – date_format kolumna:

SELECT r.date_format
FROM master.sys.dm_exec_requests r
WHERE r.session_id = @@SPID;

Wynik:

+---------------+
| date_format   |
|---------------|
| mdy           |
+---------------+

Zawęziłem również zapytanie do aktualnego żądania. Zrobiłem to za pomocą @@SPID , który zwraca identyfikator sesji bieżącego procesu użytkownika.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego zawsze wolimy używać parametrów w instrukcjach SQL?

  2. Indeksy oparte na funkcjach w SQL Server

  3. Jak czytać i analizować plany wykonania SQL Server

  4. datetime2 vs smalldatetime w SQL Server:jaka jest różnica?

  5. Rozwiązywanie problemów z przyznawaniem pamięci zmiennej w programie SQL Server