sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo encontrar el formato de fecha que se utiliza en la sesión actual en SQL Server (T-SQL)

Cuando usa SQL Server, su conexión actual incluye una serie de opciones que determinan cosas como el idioma, los formatos de fecha, etc. Estos pueden establecerse en cualquiera que sea el valor predeterminado, pero también pueden anularse durante la sesión usando un SET declaración.

El formato de fecha afecta la interpretación de las cadenas de caracteres, ya que se convierten en valores de fecha para su almacenamiento en la base de datos. Cuando el idioma se configura usando SET LANGUAGE , la configuración del formato de fecha se establece implícitamente en consecuencia. Esto se puede anular explícitamente con SET DATEFORMAT declaración.

En cualquier caso, puede encontrar el formato de fecha actual utilizando DBCC USEROPTIONS dominio. Este comando devuelve el SET opciones que se han configurado para la conexión actual.

Sintaxis

La sintaxis es así:

DBCC USEROPTIONS  
[ WITH NO_INFOMSGS ]

El NO_INFOMSGS opcional El argumento suprime todos los mensajes informativos que tienen niveles de gravedad de 0 a 10.

Ejemplo

Aquí hay un ejemplo de cómo ejecutar el comando y los resultados que obtengo en mi máquina de prueba actual:

DBCC USEROPTIONS;

Resultado:

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

Como se mencionó, puede cambiar estas opciones con SET declaraciones.

Aquí hay un ejemplo de cómo cambiar el idioma de la sesión actual y luego ejecutar el comando nuevamente:

SET LANGUAGE German;
DBCC USEROPTIONS;

Resultado:

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

Entonces podemos ver que no solo cambió el idioma, sino que también cambió el formato de la fecha.

Sin embargo, si este no es el formato de fecha deseado, el formato de fecha se puede cambiar explícitamente usando SET DATEFORMAT .

Así:

SET DATEFORMAT mdy;
DBCC USEROPTIONS;

Resultado:

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

Y podemos ver que el formato de la fecha se ha cambiado según lo especificado, dejando el idioma como está.

La vista sys.dm_exec_requests

También puede devolver el formato de fecha que se utiliza en la solicitud actual consultando sys.dm_exec_requests vista del sistema. Esta vista devuelve un buen montón de columnas, pero puede reducirlo a solo aquellas columnas que le interesen. En nuestro caso, solo estamos interesados ​​en una columna:el date_format columna:

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

Resultado:

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

También reduje la consulta a solo la solicitud actual. Hice esto usando @@SPID , que devuelve el ID de sesión del proceso de usuario actual.