Cuando se conecta a SQL Server, normalmente el formato de fecha lo determina su idioma. El idioma predeterminado para una sesión es el idioma para el inicio de sesión de esa sesión, a menos que se anule por sesión mediante el uso de la Conectividad abierta de bases de datos (ODBC) o las API de OLE DB.
La configuración del 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. No afecta la visualización de los valores de tipo de datos de fecha que se almacenan en la base de datos o el formato de almacenamiento.
A pesar de que el idioma de su sesión determina el formato de fecha, puede anular el formato de fecha si es necesario. Por ejemplo, si su idioma es us_english
, el formato de fecha será mdy
(para que 01/07/2018 representa el 1 de julio y no el 7 de enero). Puede cambiar esto para que el formato de fecha sea dmy
(o cualquier otro formato) mientras el idioma permanece us_english
.
Puede usar T-SQL para establecer explícitamente el formato de fecha de la sesión actual usando SET DATEFORMAT
declaración.
Sintaxis
Así es como funciona la sintaxis:
SET DATEFORMAT { format | @format_var }
Donde format | @format_var
es el orden de las partes de la fecha.
Los valores válidos son mdy
, dmy
, ymd
, ydm
, myd
y dym
. Estos pueden ser conjuntos de caracteres Unicode o de doble byte (DBCS) convertidos a Unicode.
Sin embargo, tenga en cuenta que ydm
no es compatible con fecha , fechahora2 y desplazamiento de fecha y hora tipos de datos.
Ejemplo
Antes de cambiar algo, veamos las opciones de usuario actuales. Esto nos dirá cuál es el idioma actual y el formato de fecha (así como algunas otras cosas):
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 | +-------------------------+----------------+
Podemos ver que el idioma es us_english
y el formato de fecha es mdy
(que es el formato de fecha predeterminado para ese idioma).
Entonces, cambiemos el formato de fecha, luego verifiquemos las opciones de usuario nuevamente:
SET DATEFORMAT dmy; DBCC USEROPTIONS;
Resultado:
+-------------------------+----------------+ | 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 | +-------------------------+----------------+
Y podemos ver que el formato de la fecha ha cambiado, mientras que el idioma sigue siendo el mismo.
Así es como se cambia el formato de fecha sin cambiar el idioma. Como se mencionó, si cambia el idioma, implícitamente establecerá el formato de fecha al mismo tiempo. Si eso es lo que quiere hacer, consulte Cómo configurar el idioma actual en SQL Server (T-SQL).