Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment trouver les formats de date utilisés pour une langue spécifique dans SQL Server (T-SQL)

Lorsque vous travaillez avec des dates dans SQL Server, il est facile de se tromper avec différents formats de date. Par exemple, quelqu'un des États-Unis pourrait considérer 01/07/2018 signifie le 7 janvier, mais quelqu'un du Royaume-Uni pourrait considérer que cela signifie le 1er juillet.

Dans de nombreux cas, vous ne savez peut-être même pas quel format de date est utilisé pour une langue/culture particulière. Heureusement, SQL Server stocke ces informations dans sa base de données de ressources et vous pouvez les récupérer en utilisant l'une des deux méthodes ci-dessous.

Méthode 1 :la procédure stockée sp_helplanguage

Le sp_helplanguage La procédure stockée renvoie des informations sur une autre langue particulière ou sur toutes les langues de SQL Server. Cela inclut le nom de la langue, son alias, le format de la date et les noms des mois, associés à la langue respective.

Pour renvoyer des informations pour toutes les langues dans SQL Server, exécutez la commande suivante :

EXEC sp_helplanguage;

Cela renvoie un ensemble de résultats assez volumineux. Voici la liste complète des langues que j'obtiens lorsque je l'exécute sur mon instance de SQL Server 2017.

Si vous ne voulez pas que toutes les langues soient renvoyées, vous pouvez le limiter à une langue spécifique.

Voici un exemple :

EXEC sp_helplanguage Spanish;

Voici le résultat lorsque je l'exécute dans 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

Vous pouvez également utiliser @@LANGUAGE pour le réduire à votre langue actuelle. Exemple :

EXEC sp_helplanguage @@LANGUAGE;

Résultat :

-[ 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éthode 2 :la vue sys.syslanguages

La deuxième façon de renvoyer les informations de langue consiste à accéder directement à sys.syslanguages vue de compatibilité du système. Il s'agit de la vue à partir de laquelle la procédure stockée ci-dessus tire ses informations.

Voici comment interroger cette vue :

SELECT * FROM sys.syslanguages;

Vous pouvez également le réduire à une langue en ajoutant un WHERE clause :

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

Notez que chaque entrée de langue a un nom et un alias. La requête ci-dessus pourrait être réécrite pour utiliser l'alias :

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

Comme vous pouvez probablement le constater, il est beaucoup plus facile d'utiliser la procédure stockée (1ère option), mais cette vue peut être pratique si vous souhaitez uniquement renvoyer un sous-ensemble de colonnes.

Par exemple :

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

Résultat :

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