Trong SQL Server, bạn có thể sử dụng T-SQL FORMAT()
hàm để trả về các giá trị như số và ngày tháng dưới dạng chuỗi được định dạng.
Bạn cung cấp giá trị cần định dạng và bạn chỉ định định dạng để sử dụng. Hàm chấp nhận một đối số tùy chọn cho phép bạn chỉ định văn hóa để sử dụng khi định dạng giá trị.
Cú pháp
Cú pháp như sau:
FORMAT ( value, format [, culture ] )
Giá trị value
là giá trị bạn muốn được định dạng và format
là một chuỗi định dạng hợp lệ chỉ định định dạng mong muốn.
culture
tùy chọn đối số có thể được sử dụng để xác định một nền văn hóa. Nếu bị bỏ qua, ngôn ngữ của phiên hiện tại sẽ được sử dụng.
FORMAT
chức năng là không xác định.
Ví dụ 1 - Định dạng số
Dưới đây là một ví dụ về định dạng một số:
SELECT FORMAT(1, 'N') AS Result;
Kết quả:
+----------+ | Result | |----------| | 1.00 | +----------+
Trong trường hợp này, tôi đã sử dụng N
dưới dạng chuỗi định dạng. Đây là định dạng số chuẩn để xuất giá trị dưới dạng số. Bộ xác định định dạng cụ thể này dẫn đến kết quả đầu ra được định dạng bằng các chữ số tích phân và thập phân, dấu phân cách nhóm và dấu phân cách thập phân với dấu âm tùy chọn. Mã định dạng này không phân biệt chữ hoa chữ thường, vì vậy N
hoặc n
ổn.
Ví dụ 2 - Định dạng đơn vị tiền tệ
Dưới đây là một ví dụ về định dạng một số dưới dạng đơn vị tiền tệ:
SELECT FORMAT(1, 'C') AS Result;
Kết quả:
+----------+ | Result | |----------| | $1.00 | +----------+
Thêm định dạng số
Có nhiều chuỗi định dạng khác có thể được sử dụng với FORMAT()
hàm số. Ví dụ:có các chuỗi định dạng cho tỷ lệ phần trăm, điểm cố định, hàm mũ (khoa học), hệ thập lục phân, v.v.
Các chuỗi định dạng số được phân tách thành tiêu chuẩn và tùy chỉnh.
Hai bài viết sau liệt kê tất cả các chuỗi định dạng số, bao gồm các ví dụ:
- Chuỗi định dạng số chuẩn
- Chuỗi định dạng số tùy chỉnh
Ngoài ra, hãy xem Cách định dạng số trong SQL Server để biết thêm ví dụ về định dạng số.
Ví dụ 3 - Định dạng ngày
Dưới đây là một ví dụ về định dạng ngày:
SELECT GETDATE() AS 'Unformatted Date', FORMAT( GETDATE(), 'D') AS 'Formatted Date';
Kết quả:
+-------------------------+------------------------+ | Unformatted Date | Formatted Date | |-------------------------+------------------------| | 2019-05-08 06:16:55.613 | Wednesday, May 8, 2019 | +-------------------------+------------------------+
Trong trường hợp này, tôi đã sử dụng D
chỉ định một mẫu ngày dài.
Các định dạng ngày khác
Có nhiều chuỗi định dạng khác có thể được sử dụng để định dạng ngày tháng. Cũng giống như các chuỗi định dạng số, các chuỗi định dạng ngày và giờ được phân tách thành tiêu chuẩn và tùy chỉnh, vì vậy bạn có thể tạo các định dạng tùy chỉnh của riêng mình hoặc bạn có thể dựa vào định dạng tiêu chuẩn.
Hai bài viết sau liệt kê tất cả các chuỗi định dạng ngày và giờ, bao gồm các ví dụ:
- Chuỗi định dạng ngày và giờ chuẩn
- Chuỗi định dạng ngày và giờ tùy chỉnh
Ngoài ra, hãy xem Cách định dạng ngày và giờ trong SQL Server để biết thêm ví dụ.
Ví dụ 4 - Văn hóa culture
Tùy chọn Đối số
Dưới đây là một ví dụ về việc sử dụng culture
đối số để trả về một giá trị bằng các đơn vị tiền tệ khác nhau:
SELECT FORMAT(1, 'C', 'fr-FR') AS 'France', FORMAT(1, 'C', 'th-TH') AS 'Thailand', FORMAT(1, 'C', 'ja-JP') AS 'Japan';
Kết quả:
+----------+------------+---------+ | France | Thailand | Japan | |----------+------------+---------| | 1,00 € | ฿1.00 | ¥1 | +----------+------------+---------+
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ố; nó không giới hạn ở các ngôn ngữ được SQL Server hỗ trợ rõ ràng.
Nếu bạn không cung cấp đối số này, ngôn ngữ của phiên hiện tại sẽ được sử dụng.
Để biết thêm ví dụ, hãy xem Cài đặt ngôn ngữ có thể ảnh hưởng đến FORMAT()
của bạn như thế nào Kết quả.
Ví dụ 5 - culture
không hợp lệ Đối số
Nếu bạn cung cấp văn hóa không hợp lệ, bạn sẽ gặp lỗi:
SELECT FORMAT(1, 'C', 'oop-SS!') AS 'Oops!';
Kết quả:
The culture parameter 'oop-SS!' provided in the function call is not supported.
Ví dụ 6 - Giá trị định dạng không hợp lệ
Tuy nhiên, đối với các lỗi khác, hàm trả về NULL
. Ví dụ:đây là điều sẽ xảy ra nếu tôi cung cấp một giá trị không hợp lệ để được định dạng:
SELECT FORMAT(GETDATE(), 'C') AS 'Result';
Kết quả:
+----------+ | Result | |----------| | NULL | +----------+
Trong trường hợp này, tôi đang cố định dạng ngày tháng thành đơn vị tiền tệ và do đó kết quả là NULL
.
Loại dữ liệu hợp lệ
FORMAT()
dựa trên sự hiện diện của .NET Framework Common Language Runtime (CLR) và sử dụng các quy tắc định dạng CLR.
Các kiểu dữ liệu sau có thể được định dạng bằng FORMAT()
hàm số. Danh sách này chứa các kiểu dữ liệu được chấp nhận cho chuỗi đầu vào cùng với các kiểu ánh xạ .NET Framework tương đương của chúng.
Category | Loại | Loại .NET |
---|---|---|
Số | bigint | Int64 |
Số | int | Int32 |
Số | smallint | Int16 |
Số | tinyint | Byte |
Số | thập phân | SqlDecimal |
Số | số | SqlDecimal |
Số | float | Nhân đôi |
Số | thực | Đơn |
Số | tiền nhỏ | Thập phân |
Số | tiền | Thập phân |
Ngày và giờ | ngày | DateTime |
Ngày và giờ | thời gian | Khoảng thời gian |
Ngày và giờ | ngày giờ | DateTime |
Ngày và giờ | smalldatetime | DateTime |
Ngày và giờ | datetime2 | DateTime |
Ngày và giờ | datetimeoffset | DateTimeOffset |
Thoát dấu hai chấm và dấu chấm cho Loại dữ liệu 'thời gian'
Khi sử dụng FORMAT
, dấu hai chấm và dấu chấm phải được thoát ra (điều này tuân theo quy tắc định dạng CLR). Do đó, khi chuỗi định dạng (tham số thứ hai) chứa dấu hai chấm hoặc dấu chấm, dấu hai chấm hoặc dấu chấm phải được thoát bằng dấu gạch chéo ngược khi giá trị đầu vào (tham số đầu tiên) là time kiểu dữ liệu.
Ví dụ:
SELECT CAST('12:15' AS time) AS 'Unformatted Data', FORMAT(CAST('12:15' AS time), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS time), N'hh\.mm') AS 'Escaped';
Kết quả:
+--------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |--------------------+-------------+-----------| | 12:15:00 | NULL | 12.15 | +--------------------+-------------+-----------+
Vì vậy, như mong đợi, chuỗi không thoát trả về NULL
.
Như đã đề cập, điều này chỉ áp dụng cho thời gian loại dữ liệu. Nếu chúng tôi thay đổi giá trị đầu vào thành một loại dữ liệu khác, chúng tôi không cần phải loại bỏ nó:
SELECT CAST('12:15' AS datetime) AS 'Unformatted Data', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Unescaped', FORMAT(CAST('12:15' AS datetime), N'hh.mm') AS 'Escaped';
Kết quả:
+-------------------------+-------------+-----------+ | Unformatted Data | Unescaped | Escaped | |-------------------------+-------------+-----------| | 1900-01-01 12:15:00.000 | 12.15 | 12.15 | +-------------------------+-------------+-----------+
Trong trường hợp này, giá trị đầu vào là ngày giờ và do đó, kết quả vẫn ổn mà không cần thoát khỏi nó.
Bạn cũng có thể sử dụng dấu gạch chéo ngược để thoát khỏi bất kỳ ký tự nào khác mà bạn muốn đưa vào chuỗi kết quả, nếu không thì ký tự này sẽ được hiểu là một mã định dạng. Đặt trước một ký tự bằng dấu gạch chéo ngược biểu thị rằng ký tự sau là một ký tự nên được bao gồm trong chuỗi kết quả không thay đổi.
Trong chuỗi định dạng ngày và giờ tùy chỉnh, d
, f
, F
, g
, h
, H
, K
, m
, M
, s
, t
, y
, z
, :
hoặc /
các ký tự được hiểu là các chỉ định định dạng tùy chỉnh chứ không phải là các ký tự theo nghĩa đen.
Trong chuỗi định dạng số tùy chỉnh, #
, 0
, .
, ,
, %
và ‰
các ký hiệu được hiểu là các ký hiệu định dạng chứ không phải là các ký tự theo nghĩa đen. Chữ hoa và chữ thường E
cũng như +
và -
các ký hiệu cũng có thể được hiểu là các ký hiệu định dạng, tùy thuộc vào vị trí của chúng trong chuỗi định dạng.
Nếu bạn cần bao gồm một dấu gạch chéo ngược trong chuỗi kết quả, hãy loại bỏ nó bằng một dấu gạch chéo ngược khác.
Điều khiển từ xa
FORMAT()
chức năng không thể được khởi động từ xa vì nó phụ thuộc vào sự hiện diện của CLR. Việc khởi động lại một chức năng yêu cầu CLR, có thể gây ra lỗi trên máy chủ từ xa.
Khi nào sử dụng FORMAT()
Chức năng
Microsoft khuyến nghị rằng FORMAT()
hàm được sử dụng để định dạng nhận biết ngôn ngữ của các giá trị ngày / giờ và số dưới dạng chuỗi và cho các chuyển đổi kiểu dữ liệu chung, CAST()
hoặc hàm CONVERT()
hàm nên được sử dụng thay thế.