Podczas pracy z datami w SQL Server łatwo jest potykać się o różne formaty dat. Na przykład ktoś z USA może rozważyć 01/07/2018 oznacza 7 stycznia, ale ktoś z Wielkiej Brytanii może uznać, że oznacza to 1 lipca.
W wielu przypadkach możesz nawet nie wiedzieć, jaki format daty jest używany dla konkretnego języka/kultury. Na szczęście SQL Server przechowuje te informacje w swojej bazie danych zasobów i można je pobrać za pomocą jednej z dwóch poniższych metod.
Metoda 1:Procedura przechowywana sp_helplanguage
sp_helplanguage
procedura składowana zwraca informacje o określonym języku alternatywnym lub o wszystkich językach w programie SQL Server. Obejmuje to nazwę języka, jego alias i format daty oraz nazwy miesięcy powiązane z odpowiednim językiem.
Aby zwrócić informacje dla wszystkich języków w SQL Server, uruchom następujące polecenie:
EXEC sp_helplanguage;
Zwraca to dość duży zestaw wyników. Oto pełna lista języków, które otrzymuję, gdy uruchamiam je na mojej instancji SQL Server 2017.
Jeśli nie chcesz, aby zwracane były wszystkie języki, możesz zawęzić je do określonego języka.
Oto przykład:
EXEC sp_helplanguage Spanish;
Oto wynik po uruchomieniu go w 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
Możesz też użyć @@LANGUAGE
aby zawęzić go do tego, jaki jest twój obecny język. Przykład:
EXEC sp_helplanguage @@LANGUAGE;
Wynik:
-[ 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
Metoda 2:Widok sys.syslanguages
Drugim sposobem na zwrócenie informacji o języku jest przejście bezpośrednio do sys.syslanguages
widok zgodności systemu. To jest widok, z którego powyższa procedura składowana pobiera informacje.
Oto jak wysłać zapytanie do tego widoku:
SELECT * FROM sys.syslanguages;
Możesz również zawęzić go do języka, dodając WHERE
klauzula:
SELECT * FROM sys.syslanguages WHERE name = 'Español';
Pamiętaj, że każdy wpis języka ma nazwę i alias. Powyższe zapytanie można przepisać tak, aby używało aliasu:
SELECT * FROM sys.syslanguages WHERE alias = 'Spanish';
Jak zapewne wiesz, znacznie łatwiej jest użyć procedury składowanej (pierwsza opcja), ale ten widok może być przydatny, jeśli chcesz zwrócić tylko podzbiór kolumn.
Na przykład:
SELECT name, alias, dateformat FROM sys.syslanguages WHERE alias = 'Spanish';
Wynik:
+---------+---------+--------------+ | name | alias | dateformat | |---------+---------+--------------| | Español | Spanish | dmy | +---------+---------+--------------+