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

Cách chỉ định văn hóa bất biến khi sử dụng FORMAT () trong SQL Server

Trong SQL Server, bạn có thể sử dụng FORMAT() chức năng định dạng ngày / giờ và các giá trị số dưới dạng chuỗi. Đặc biệt, hàm cung cấp định dạng “nhận biết ngôn ngữ” và hàm chấp nhận đối số “văn hóa”, cho phép bạn chỉ định văn hóa hoặc ngôn ngữ để sử dụng cho định dạng thực tế. Ví dụ:bạn có thể chuyển en-us để đảm bảo kết quả được định dạng theo định dạng tiếng Anh Mỹ.

Đối số văn hóa là tùy chọn, vì vậy nếu bạn không cung cấp đối số này, đầu ra sẽ được xác định theo ngôn ngữ của phiên hiện tại.

FORMAT() hàm chấp nhận bất kỳ văn hóa nào được .NET Framework hỗ trợ làm đối số (bạn không bị giới hạn ở các ngôn ngữ được SQL Server hỗ trợ rõ ràng).

Một trong những nền văn hóa được .NET Framework hỗ trợ là nền văn hóa bất biến. Văn hóa bất biến là văn hóa vô cảm. Đặc biệt hơn, văn hóa này gắn liền với ngôn ngữ tiếng Anh chứ không gắn với bất kỳ quốc gia / khu vực nào.

Để chỉ định FORMAT() đó sẽ xuất ra kết quả bằng cách sử dụng phương pháp nuôi cấy bất biến, chỉ cần sử dụng "iv" đối với đối số văn hóa (đối số thứ ba).

Ví dụ 1 - Đơn vị tiền tệ

Dưới đây là một ví dụ về việc định dạng một giá trị như một đơn vị tiền tệ bằng cách sử dụng văn hóa bất biến.

SELECT FORMAT(123, 'C', 'iv') Result;

Kết quả:

+----------+
| Result   |
|----------|
| ¤123.00  |
+----------+

Điều này dẫn đến kết quả đầu ra có một phần phân số với một vị trí thập phân. Nó cũng được gắn trước với ký hiệu tiền tệ (¤), được sử dụng để biểu thị một đơn vị tiền tệ không xác định (đây là ký tự Unicode U + 00A4).

Ví dụ 2 - Ngày

Dưới đây là một ví dụ về định dạng ngày bằng cách sử dụng văn hóa bất biến cùng với định dạng ngày ngắn.

DECLARE @date date = '2030-05-25';
SELECT FORMAT(@date, 'd', 'iv') Result;

Kết quả:

+------------+
| Result     |
|------------|
| 05/25/2030 |
+------------+

Định dạng ngày ngắn cho văn hóa bất biến là MM / dd / yyyy.

Đây là một lần nữa, nhưng lần này tôi so sánh nó với các nền văn hóa Mỹ, Anh và Đức (Deutsch).

DECLARE @date date = '2030-05-25';
SELECT 
  FORMAT(@date, 'd', 'iv') 'Invariant Culture',
  FORMAT(@date, 'd', 'en-us') 'US English',
  FORMAT(@date, 'd', 'en-gb') 'British',
  FORMAT(@date, 'd', 'de-de') 'German (Deutsch)';

Kết quả:

+---------------------+--------------+------------+--------------------+
| Invariant Culture   | US English   | British    | German (Deutsch)   |
|---------------------+--------------+------------+--------------------|
| 05/25/2030          | 5/25/2030    | 25/05/2030 | 25.05.2030         |
+---------------------+--------------+------------+--------------------+

Ví dụ 3 - Tất cả các Định dạng Ngày và Giờ Chuẩn

Đây là một cái khác sử dụng văn hóa bất biến, nhưng lần này tôi định dạng datetimeoffset sử dụng tất cả các chuỗi định dạng ngày và giờ chuẩn được .NET Framework hỗ trợ.

DECLARE @date datetimeoffset, @culture char(2); 
SET @date = '2030-05-25 23:59:30.1234567 +07:00';
SET @culture = 'iv';
SELECT 
  FORMAT(@date, 'd', @culture) AS 'd',
  FORMAT(@date, 'D', @culture) AS 'D',
  FORMAT(@date, 'f', @culture) AS 'f',
  FORMAT(@date, 'F', @culture) AS 'F',
  FORMAT(@date, 'g', @culture) AS 'g',
  FORMAT(@date, 'G', @culture) AS 'G',
  FORMAT(@date, 'm', @culture) AS 'm',
  FORMAT(@date, 'M', @culture) AS 'M',
  FORMAT(@date, 'o', @culture) AS 'o',
  FORMAT(@date, 'O', @culture) AS 'O',
  FORMAT(@date, 'r', @culture) AS 'r',
  FORMAT(@date, 'R', @culture) AS 'R',
  FORMAT(@date, 's', @culture) AS 's',
  FORMAT(@date, 't', @culture) AS 't',
  FORMAT(@date, 'T', @culture) AS 'T',
  FORMAT(@date, 'u', @culture) AS 'u',
  FORMAT(@date, 'U', @culture) AS 'U',
  FORMAT(@date, 'y', @culture) AS 'y',
  FORMAT(@date, 'Y', @culture) AS 'Y';

Kết quả (sử dụng đầu ra dọc):

d | 05/25/2030
D | Saturday, 25 May 2030
f | Saturday, 25 May 2030 23:59
F | Saturday, 25 May 2030 23:59:30
g | 05/25/2030 23:59
G | 05/25/2030 23:59:30
m | May 25
M | May 25
o | 2030-05-25T23:59:30.1234567+07:00
O | 2030-05-25T23:59:30.1234567+07:00
r | Sat, 25 May 2030 16:59:30 GMT
R | Sat, 25 May 2030 16:59:30 GMT
s | 2030-05-25T23:59:30
t | 23:59
T | 23:59:30
u | 2030-05-25 16:59:30Z
U | NULL
y | 2030 May
Y | 2030 May

Văn hóa bất biến không hoạt động trên hệ thống của bạn?

Nếu bạn không thể làm cho văn hóa bất biến hoạt động trên hệ thống của mình, thì có thể là do phiên bản .NET Framework cũ hơn đang được cài đặt. Tài liệu cho .NET Framework 4.8 tuyên bố rõ ràng rằng văn hóa bất biến khả dụng bằng cách sử dụng mã hai chữ cái ISO 639-1 "iv" .

Tuy nhiên, đối với câu hỏi Stack Overflow này, câu trả lời từ Solomon Rutzky cho thấy rằng điều này có thể chỉ có sẵn từ .NET 4.5.

Nếu bạn không thể làm cho nó hoạt động bằng phiên bản .NET cũ hơn, hãy thử nâng cấp lên phiên bản mới nhất (hoặc phiên bản từ ít nhất 4.5).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pyodbc - tốc độ chèn hàng loạt rất chậm

  2. Làm thế nào để gọi Thủ tục đã lưu trong Chế độ xem?

  3. Hàm SUM () trong SQL Server

  4. Cách tốt nhất để thực hiện logic câu lệnh chữ hoa chữ thường lồng nhau trong SQL Server

  5. Cách tạo kế hoạch thực thi trong SQL Server