sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man hittar de datumformat som används för ett specifikt språk i SQL Server (T-SQL)

När du arbetar med datum i SQL Server är det lätt att bli snubblad över olika datumformat. Till exempel kan någon från USA överväga 01/07/2018 betyder den 7 januari, men någon från Storbritannien kanske anser att det menar den 1 juli.

I många fall kanske du inte ens vet vilket datumformat som används för ett visst språk/kultur. Som tur är lagrar SQL Server denna information i sin resursdatabas, och du kan hämta den genom att använda någon av de två metoderna nedan.

Metod 1: sp_helplanguage lagrad procedur

 sp_helplanguage lagrad procedur returnerar information om ett visst alternativt språk eller om alla språk i SQL Server. Detta inkluderar språknamnet, dess alias och datumformat samt månadsnamn som är associerade med respektive språk.

För att returnera information för alla språk i SQL Server, kör följande:

EXEC sp_helplanguage;

Detta ger en ganska stor resultatuppsättning. Här är hela listan över språk jag får när jag kör det på min instans av SQL Server 2017.

Om du inte vill att alla språk ska returneras kan du begränsa det till ett specifikt språk.

Här är ett exempel:

EXEC sp_helplanguage Spanish;

Här är resultatet när jag kör 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 också använda @@LANGUAGE för att begränsa det till vilket språk du än har. Exempel:

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

Metod 2:vyn sys.syslanguages

Det andra sättet att returnera språkinformationen är genom att gå direkt till sys.syslanguages systemkompatibilitetsvy. Detta är den vy som den lagrade proceduren ovan får sin information från.

Så här frågar du den här vyn:

SELECT * FROM sys.syslanguages;

Du kan också begränsa det till ett språk genom att lägga till en WHERE klausul:

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

Observera att varje språkpost har ett namn och ett alias. Ovanstående fråga kan skrivas om för att använda aliaset:

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

Som du säkert förstår är det mycket enklare att använda den lagrade proceduren (första alternativet), men den här vyn kan vara praktisk om du bara vill att en delmängd av kolumner ska returneras.

Till exempel:

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

Resultat:

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

  1. Varför returnerar password_verify falskt?

  2. Har du problem med MS Access Crashing? Prova dessa lösningar först

  3. Villkorlig aggregeringsprestanda

  4. Kommentera karaktär/tecken i postgres / postgresql / psql?