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

Sådan finder du de datoformater, der bruges til et bestemt sprog i SQL Server (T-SQL)

Når du arbejder med datoer i SQL Server, er det nemt at blive ramt af forskellige datoformater. En person fra USA kan f.eks. overveje 01/07/2018 betyder den 7. januar, men nogen fra Storbritannien vil måske overveje, at det betyder den 1. juli.

I mange tilfælde ved du måske ikke engang, hvilket datoformat der bruges til et bestemt sprog/kultur. Heldigvis gemmer SQL Server disse oplysninger i sin ressourcedatabase, og du kan hente dem ved at bruge en af ​​de to metoder nedenfor.

Metode 1: sp_helplanguage Stored Procedure

 sp_helplanguage lagret procedure returnerer oplysninger om et bestemt alternativt sprog eller om alle sprog i SQL Server. Dette inkluderer sprognavnet, dets alias og datoformat og månedsnavne, der er knyttet til det respektive sprog.

For at returnere oplysninger for alle sprog i SQL Server skal du køre følgende:

EXEC sp_helplanguage;

Dette giver et ret stort resultatsæt. Her er den fulde liste over sprog, jeg får, når jeg kører det på min forekomst af SQL Server 2017.

Hvis du ikke vil have alle sprog returneret, kan du indsnævre det til et bestemt sprog.

Her er et eksempel:

EXEC sp_helplanguage Spanish;

Her er resultatet, når jeg kører det i 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

Du kan også bruge @@LANGUAGE at indsnævre det til, hvad end dit nuværende sprog er. Eksempel:

EXEC sp_helplanguage @@LANGUAGE;

Resultat:

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

Metode 2:Visningen sys.syslanguages

Den anden måde, du kan returnere sprogoplysningerne på, er ved at gå direkte til sys.syslanguages systemkompatibilitetsvisning. Dette er den opfattelse, som ovenstående lagrede procedure får sine oplysninger fra.

Sådan forespørger du denne visning:

SELECT * FROM sys.syslanguages;

Du kan også indsnævre det til et sprog ved at tilføje en WHERE klausul:

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

Bemærk, at hver sprogindgang har et navn og et alias. Ovenstående forespørgsel kunne omskrives til at bruge aliaset:

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

Som du sikkert kan se, er det meget nemmere at bruge den lagrede procedure (1. mulighed), men denne visning kan være praktisk, hvis du kun vil have en undergruppe af kolonner returneret.

For eksempel:

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

Resultat:

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

  1. PL/SQL Tutorial:Alt du behøver at vide om PL/SQL

  2. Hvad er forskellen mellem MySQL og SQL?

  3. En begyndervejledning til SQL-tabeller

  4. Msg 8672, Level 16, State 1, Line 1 MERGE-sætningen forsøgte at OPDATERE eller SLETTE den samme række mere end én gang