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

Cómo encontrar los formatos de fecha utilizados para un idioma específico en SQL Server (T-SQL)

Cuando se trabaja con fechas en SQL Server, es fácil confundirse con diferentes formatos de fecha. Por ejemplo, alguien de los EE. UU. podría considerar 01/07/2018 significa el 7 de enero, pero alguien del Reino Unido podría considerar que significa el 1 de julio.

En muchos casos, es posible que ni siquiera sepa qué formato de fecha se usa para un idioma/cultura en particular. Afortunadamente, SQL Server almacena esta información en su base de datos de recursos y puede recuperarla utilizando cualquiera de los dos métodos siguientes.

Método 1:el procedimiento almacenado de sp_helplanguage

El sp_helplanguage El procedimiento almacenado devuelve información sobre un idioma alternativo en particular o sobre todos los idiomas en SQL Server. Esto incluye el nombre del idioma, su alias, el formato de la fecha y los nombres de los meses asociados con el idioma respectivo.

Para devolver información para todos los idiomas en SQL Server, ejecute lo siguiente:

EXEC sp_helplanguage;

Esto devuelve un conjunto de resultados bastante grande. Aquí está la lista completa de idiomas que obtengo cuando ejecuto eso en mi instancia de SQL Server 2017.

Si no desea que se devuelvan todos los idiomas, puede restringirlo a un idioma específico.

He aquí un ejemplo:

EXEC sp_helplanguage Spanish;

Aquí está el resultado cuando lo ejecuto en 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

También puede usar @@LANGUAGE para reducirlo a cualquiera que sea su idioma actual. Ejemplo:

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:la vista sys.syslanguages

La segunda forma de devolver la información del idioma es yendo directamente a sys.syslanguages. vista de compatibilidad del sistema. Esta es la vista de la que el procedimiento almacenado anterior obtiene su información.

Así es como consultar esta vista:

SELECT * FROM sys.syslanguages;

También puede limitarlo a un idioma agregando un WHERE cláusula:

SELECT * FROM sys.syslanguages
WHERE name = 'Español';

Tenga en cuenta que cada entrada de idioma tiene un nombre y un alias. La consulta anterior podría reescribirse para usar el alias:

SELECT * FROM sys.syslanguages
WHERE alias = 'Spanish';

Como probablemente se dará cuenta, es mucho más fácil usar el procedimiento almacenado (primera opción), pero esta vista podría ser útil si solo desea que se devuelva un subconjunto de columnas.

Por ejemplo:

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

Resultado:

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