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