Quando você se conecta ao SQL Server, geralmente o formato de data é determinado pelo seu idioma. O idioma padrão para uma sessão é o idioma do login dessa sessão, a menos que seja substituído por sessão usando o ODBC (Open Database Connectivity) ou APIs OLE DB.
A configuração do formato de data afeta a interpretação das cadeias de caracteres à medida que são convertidas em valores de data para armazenamento no banco de dados. Ele não afeta a exibição dos valores de tipo de dados de data armazenados no banco de dados ou no formato de armazenamento.
Apesar do idioma da sua sessão determinar o formato da data, você pode substituir o formato da data, se necessário. Por exemplo, se seu idioma for
us_english
, o formato de data será mdy
(para que 01/07/2018 representa o 1º de julho e não o 7 de janeiro). Você pode alterar isso para que o formato de data seja dmy
(ou qualquer outro formato) enquanto o idioma permanece us_english
. Você pode usar T-SQL para definir explicitamente o formato de data da sessão atual usando o
SET DATEFORMAT
demonstração. Sintaxe
Veja como fica a sintaxe:
SET DATEFORMAT { format | @format_var }
Onde
format | @format_var
é a ordem das partes da data. Os valores válidos são
mdy
, dmy
, ymd
, ydm
, myd
e dym
. Eles podem ser Unicode ou conjuntos de caracteres de byte duplo (DBCS) convertidos em Unicode. No entanto, observe que
ydm
não é compatível com data , datahora2 e deslocamento de data e hora tipos de dados. Exemplo
Antes de alterarmos qualquer coisa, vamos ver as opções atuais do usuário. Isso nos dirá qual é o idioma atual e o formato da data (assim como algumas outras coisas):
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 o idioma é
us_english
e o formato de data é mdy
(que é o formato de data padrão para esse idioma). Então, vamos alterar o formato da data e verificar as opções do usuário novamente:
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 | +-------------------------+----------------+
E podemos ver que o formato da data mudou, enquanto o idioma permanece o mesmo.
Então é assim que muda o formato da data sem mudar o idioma. Como mencionado, se você alterar o idioma, ele definirá implicitamente o formato de data ao mesmo tempo. Se é isso que você quer fazer, confira Como definir o idioma atual no SQL Server (T-SQL).