Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So finden Sie die für eine bestimmte Sprache verwendeten Datumsformate in SQL Server (T-SQL)

Bei der Arbeit mit Datumsangaben in SQL Server kommt man leicht mit unterschiedlichen Datumsformaten ins Stolpern. Beispielsweise könnte jemand aus den USA 01.07.2018 in Betracht ziehen für den 7. Januar, aber jemand aus dem Vereinigten Königreich könnte es für den 1. Juli halten.

In vielen Fällen wissen Sie vielleicht nicht einmal, welches Datumsformat für eine bestimmte Sprache/Kultur verwendet wird. Glücklicherweise speichert SQL Server diese Informationen in seiner Ressourcendatenbank, und Sie können sie mit einer der beiden folgenden Methoden abrufen.

Methode 1:Die gespeicherte Prozedur sp_helplanguage

Die sp_helplanguage gespeicherte Prozedur gibt Informationen zu einer bestimmten alternativen Sprache oder zu allen Sprachen in SQL Server zurück. Dazu gehören der Sprachname, sein Alias ​​und Datumsformat sowie Monatsnamen, die der jeweiligen Sprache zugeordnet sind.

Führen Sie Folgendes aus, um Informationen für alle Sprachen in SQL Server zurückzugeben:

EXEC sp_helplanguage;

Dies gibt eine ziemlich große Ergebnismenge zurück. Hier ist die vollständige Liste der Sprachen, die ich erhalte, wenn ich das auf meiner Instanz von SQL Server 2017 ausführe.

Wenn Sie nicht möchten, dass alle Sprachen zurückgegeben werden, können Sie es auf eine bestimmte Sprache eingrenzen.

Hier ist ein Beispiel:

EXEC sp_helplanguage Spanish;

Hier ist das Ergebnis, wenn ich es in mssql-cli ausführe:

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

Sie können auch @@LANGUAGE verwenden um es auf Ihre aktuelle Sprache einzugrenzen. Beispiel:

EXEC sp_helplanguage @@LANGUAGE;

Ergebnis:

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

Methode 2:Die sys.syslanguages-Ansicht

Die zweite Möglichkeit, die Sprachinformationen zurückzugeben, besteht darin, direkt zu sys.syslanguages zu gehen Systemkompatibilitätsansicht. Dies ist die Ansicht, aus der die obige gespeicherte Prozedur ihre Informationen bezieht.

So fragen Sie diese Ansicht ab:

SELECT * FROM sys.syslanguages;

Sie können es auch auf eine Sprache eingrenzen, indem Sie ein WHERE hinzufügen Klausel:

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

Beachten Sie, dass jeder Spracheintrag einen Namen und einen Alias ​​hat. Die obige Abfrage könnte umgeschrieben werden, um den Alias ​​zu verwenden:

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

Wie Sie wahrscheinlich sehen können, ist es viel einfacher, die gespeicherte Prozedur (1. Option) zu verwenden, aber diese Ansicht könnte praktisch sein, wenn Sie nur eine Teilmenge von Spalten zurückgeben möchten.

Zum Beispiel:

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

Ergebnis:

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