Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como encontrar os formatos de data usados ​​para um idioma específico no SQL Server (T-SQL)


Ao trabalhar com datas no SQL Server, é fácil se enganar com diferentes formatos de data. Por exemplo, alguém dos EUA pode considerar 01/07/2018 para significar o dia 7 de janeiro, mas alguém do Reino Unido pode considerar que significa o dia 1º de julho.

Em muitos casos, você pode nem saber qual formato de data é usado para qualquer idioma/cultura em particular. Felizmente, o SQL Server armazena essas informações em seu banco de dados de recursos e você pode recuperá-las usando um dos dois métodos abaixo.


Método 1:o procedimento armazenado sp_helplanguage


sp_helplanguage O procedimento armazenado retorna informações sobre um idioma alternativo específico ou sobre todos os idiomas no SQL Server. Isso inclui o nome do idioma, seu alias, formato de data e nomes de mês, associados ao respectivo idioma.

Para retornar informações para todos os idiomas no SQL Server, execute o seguinte:
EXEC sp_helplanguage;

Isso retorna um conjunto de resultados bastante grande. Aqui está a lista completa de idiomas que recebo quando executo isso na minha instância do SQL Server 2017.

Se você não quiser que todos os idiomas sejam retornados, poderá reduzi-lo a um idioma específico.

Aqui está um exemplo:
EXEC sp_helplanguage Spanish;

Aqui está o resultado quando eu executo no mssql-cli:
-[ RECORD 1 ]-------------------------
langid      | 5
dateformat  | dmy
datefirst   | 1
upgrade     | 0
name        | Español
alias       | Spanish
months      | Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octub
shortmonths | Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic
days        | Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo
lcid        | 3082
msglangid   | 3082

Você também pode usar @@LANGUAGE para reduzi-lo ao seu idioma atual. Exemplo:
EXEC sp_helplanguage @@LANGUAGE;

Resultado:
-[ RECORD 1 ]-------------------------
langid      | 0
dateformat  | mdy
datefirst   | 7
upgrade     | 0
name        | us_english
alias       | English
months      | January,February,March,April,May,June,July,August,September,Octobe
shortmonths | Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec
days        | Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
lcid        | 1033
msglangid   | 1033

Método 2:a visualização sys.syslanguages


A segunda maneira de retornar as informações de idioma é indo direto para o arquivo sys.syslanguages visão de compatibilidade do sistema. Essa é a visão da qual o procedimento armazenado acima obtém suas informações.

Veja como consultar essa visualização:
SELECT * FROM sys.syslanguages;

Você também pode reduzi-lo a um idioma adicionando um WHERE cláusula:
SELECT * FROM sys.syslanguages
WHERE name = 'Español';

Observe que cada entrada de idioma tem um nome e um alias. A consulta acima pode ser reescrita para usar o alias:
SELECT * FROM sys.syslanguages
WHERE alias = 'Spanish';

Como você provavelmente pode ver, é muito mais fácil usar o procedimento armazenado (1ª opção), mas essa visualização pode ser útil se você quiser apenas um subconjunto de colunas retornado.

Por exemplo:
SELECT 
    name,
    alias,
    dateformat 
FROM sys.syslanguages
WHERE alias = 'Spanish';

Resultado:
+---------+---------+--------------+
| name    | alias   | dateformat   |
|---------+---------+--------------|
| Español | Spanish | dmy          |
+---------+---------+--------------+