Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come trovare il formato della data utilizzato nella sessione corrente in SQL Server (T-SQL)

Quando si utilizza SQL Server, la connessione corrente include una serie di opzioni che determinano cose come la lingua, i formati della data, ecc. Questi possono essere impostati su qualunque sia l'impostazione predefinita, ma possono anche essere sovrascritti durante la sessione utilizzando un SET dichiarazione.

Il formato della data influisce sull'interpretazione delle stringhe di caratteri poiché vengono convertite in valori di data per l'archiviazione nel database. Quando la lingua è impostata utilizzando SET LANGUAGE , l'impostazione del formato della data viene impostata in modo implicito di conseguenza. Questo può essere esplicitamente sovrascritto con SET DATEFORMAT dichiarazione.

In ogni caso, puoi trovare il formato della data corrente utilizzando DBCC USEROPTIONS comando. Questo comando restituisce il SET opzioni che sono state impostate per la connessione corrente.

Sintassi

La sintassi è questa:

DBCC USEROPTIONS  
[ WITH NO_INFOMSGS ]

Il NO_INFOMSGS facoltativo argomento sopprime tutti i messaggi informativi con livelli di gravità da 0 a 10.

Esempio

Ecco un esempio dell'esecuzione del comando e dei risultati che ottengo sulla mia macchina di prova corrente:

DBCC USEROPTIONS;

Risultato:

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

Come accennato, puoi modificare queste opzioni con il SET dichiarazioni.

Ecco un esempio di modifica della lingua della sessione corrente, quindi di eseguire nuovamente il comando:

SET LANGUAGE German;
DBCC USEROPTIONS;

Risultato:

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

Quindi possiamo vedere che non solo è cambiata la lingua, ma è cambiato anche il formato della data.

Tuttavia, se questo non è il formato della data desiderato, il formato della data può essere modificato esplicitamente utilizzando SET DATEFORMAT .

In questo modo:

SET DATEFORMAT mdy;
DBCC USEROPTIONS;

Risultato:

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

E possiamo vedere che il formato della data è stato modificato come specificato, lasciando la lingua così com'è.

La vista sys.dm_exec_requests

Puoi anche restituire il formato della data utilizzato nella richiesta corrente eseguendo una query su sys.dm_exec_requests vista del sistema. Questa visualizzazione restituisce un bel mucchio di colonne, ma puoi restringere il campo solo alle colonne che ti interessano. Nel nostro caso, siamo interessati solo a una colonna:il date_format colonna:

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

Risultato:

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

Ho anche ristretto la query alla sola richiesta corrente. L'ho fatto usando @@SPID , che restituisce l'ID sessione del processo utente corrente.