Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách tìm định dạng ngày được sử dụng cho một ngôn ngữ cụ thể trong SQL Server (T-SQL)

Khi làm việc với ngày tháng trong SQL Server, bạn rất dễ gặp phải các định dạng ngày tháng khác nhau. Ví dụ:một người nào đó từ Hoa Kỳ có thể xem xét 01/07/2018 có nghĩa là ngày 7 tháng 1, nhưng ai đó từ Vương quốc Anh có thể coi nó có nghĩa là ngày 1 tháng 7.

Trong nhiều trường hợp, bạn thậm chí có thể không biết định dạng ngày tháng nào được sử dụng cho bất kỳ ngôn ngữ / văn hóa cụ thể nào. May mắn thay, SQL Server lưu trữ thông tin này trong cơ sở dữ liệu tài nguyên của nó và bạn có thể truy xuất thông tin đó bằng cách sử dụng một trong hai phương pháp bên dưới.

Phương pháp 1:Thủ tục lưu trữ sp_helplanguage

sp_helplanguage thủ tục được lưu trữ trả về thông tin về một ngôn ngữ thay thế cụ thể hoặc về tất cả các ngôn ngữ trong SQL Server. Điều này bao gồm tên ngôn ngữ, bí danh và định dạng ngày tháng và tên tháng, được liên kết với ngôn ngữ tương ứng.

Để trả về thông tin cho tất cả các ngôn ngữ trong SQL Server, hãy chạy như sau:

EXEC sp_helplanguage;

Điều này trả về một tập hợp kết quả khá lớn. Đây là danh sách đầy đủ các ngôn ngữ tôi nhận được khi chạy ngôn ngữ đó trên phiên bản SQL Server 2017.

Nếu bạn không muốn trả lại tất cả các ngôn ngữ, bạn có thể thu hẹp ngôn ngữ đó thành một ngôn ngữ cụ thể.

Đây là một ví dụ:

EXEC sp_helplanguage Spanish;

Đây là kết quả khi tôi chạy nó trong 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

Bạn cũng có thể sử dụng @@LANGUAGE để thu hẹp nó xuống bất kể ngôn ngữ hiện tại của bạn là gì. Ví dụ:

EXEC sp_helplanguage @@LANGUAGE;

Kết quả:

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

Phương pháp 2:Chế độ xem sys.syslanguages ​​

Cách thứ hai bạn có thể trả lại thông tin ngôn ngữ là truy cập thẳng vào sys.syslanguages chế độ xem tương thích hệ thống. Đây là dạng xem mà thủ tục được lưu trữ ở trên lấy thông tin của nó.

Đây là cách truy vấn chế độ xem này:

SELECT * FROM sys.syslanguages;

Bạn cũng có thể thu hẹp nó thành một ngôn ngữ bằng cách thêm WHERE mệnh đề:

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

Lưu ý rằng mỗi mục nhập ngôn ngữ có một tên và một bí danh. Truy vấn trên có thể được viết lại để sử dụng bí danh:

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

Như bạn có thể nói, sử dụng quy trình được lưu trữ (tùy chọn đầu tiên) dễ dàng hơn nhiều, nhưng chế độ xem này có thể hữu ích nếu bạn chỉ muốn một tập hợp con các cột được trả về.

Ví dụ:

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

Kết quả:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu các hàm GROUPING và GROUPING_ID trong SQL Server

  2. 7 sự thật về từ đồng nghĩa SQL Server bạn nên biết

  3. Làm thế nào để lấy ngày đầu tiên và ngày cuối cùng của năm hiện tại?

  4. Chèn tất cả các giá trị của một bảng vào một bảng khác trong SQL

  5. Tìm hiểu xem phân vùng có được nén trong SQL Server (T-SQL) hay không