Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come trovare i formati di data utilizzati per una lingua specifica in SQL Server (T-SQL)

Quando si lavora con le date in SQL Server, è facile inciampare con diversi formati di data. Ad esempio, qualcuno dagli Stati Uniti potrebbe prendere in considerazione 07/01/2018 significare il 7 gennaio, ma qualcuno dal Regno Unito potrebbe ritenere che significhi il 1 luglio.

In molti casi potresti non sapere nemmeno quale formato di data viene utilizzato per una lingua/cultura particolare. Fortunatamente, SQL Server archivia queste informazioni nel database delle risorse e puoi recuperarle utilizzando uno dei due metodi seguenti.

Metodo 1:la procedura memorizzata sp_helplanguage

Il sp_helplanguage stored procedure restituisce informazioni su una particolare lingua alternativa o su tutte le lingue in SQL Server. Ciò include il nome della lingua, il relativo alias, il formato della data e i nomi dei mesi associati alla rispettiva lingua.

Per restituire informazioni per tutte le lingue in SQL Server, eseguire quanto segue:

EXEC sp_helplanguage;

Ciò restituisce un set di risultati piuttosto ampio. Ecco l'elenco completo delle lingue che ottengo quando lo eseguo sulla mia istanza di SQL Server 2017.

Se non vuoi che vengano restituite tutte le lingue, puoi restringere il campo a una lingua specifica.

Ecco un esempio:

EXEC sp_helplanguage Spanish;

Ecco il risultato quando lo eseguo in 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

Puoi anche utilizzare @@LANGUAGE per restringere il campo a qualunque sia la tua lingua attuale. Esempio:

EXEC sp_helplanguage @@LANGUAGE;

Risultato:

-[ 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

Metodo 2:la vista sys.syslanguages

Il secondo modo per restituire le informazioni sulla lingua è accedere direttamente a sys.syslanguages visualizzazione della compatibilità del sistema. Questa è la vista da cui la stored procedure sopra ottiene le sue informazioni.

Ecco come interrogare questa vista:

SELECT * FROM sys.syslanguages;

Puoi anche restringere il campo a una lingua aggiungendo un WHERE clausola:

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

Si noti che ogni voce di lingua ha un nome e un alias. La query precedente potrebbe essere riscritta per utilizzare l'alias:

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

Come probabilmente puoi vedere, è molto più semplice utilizzare la stored procedure (1a opzione), ma questa visualizzazione potrebbe essere utile se desideri restituire solo un sottoinsieme di colonne.

Ad esempio:

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

Risultato:

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