Trong SQL Server, FORMAT()
hàm cho phép bạn định dạng giá trị ngày / giờ và số dưới dạng chuỗi được định dạng bằng cách chuyển vào "chuỗi định dạng" làm đối số thứ hai (đối số đầu tiên là giá trị đang được định dạng).
Dưới đây là một ví dụ về chức năng này đang hoạt động:
FORMAT(@date, 'dd/MM/yyyy');
Trong trường hợp này, chuỗi định dạng là dd / MM / yyyy .
Chuỗi định dạng cụ thể này chỉ định rằng @date
giá trị phải được định dạng với ngày có hai chữ số, tháng có hai chữ số và năm có bốn chữ số, theo thứ tự đó và có dấu gạch chéo phía trước làm dấu phân cách.
Điều này sẽ dẫn đến một cái gì đó như thế này:
21/05/2019
Chuỗi định dạng là một chuỗi chứa một hoặc nhiều mã định dạng được xác định trước , là các ký tự đơn hoặc nhóm ký tự xác định cách định dạng đầu ra.
SQL Server chỉ chấp nhận các chuỗi định dạng được .NET Framework hỗ trợ.
Một chuỗi định dạng có thể là một chuỗi định dạng chuẩn hoặc một chuỗi định dạng tùy chỉnh. Đây là cách chúng hoạt động:
- Một chuỗi định dạng chuẩn là một chuỗi định dạng được xác định trước. Nó chứa một chỉ định định dạng duy nhất được hiểu là đại diện cho một định dạng nhất định, được xác định trước. Chuỗi định dạng chuẩn thực sự là bí danh cho các chuỗi định dạng tùy chỉnh. Tuy nhiên, chuỗi định dạng tùy chỉnh thực tế được sử dụng thường sẽ phụ thuộc vào nền văn hóa.
- Một chuỗi định dạng tùy chỉnh mặt khác, bao gồm một hoặc nhiều mã định dạng tùy chỉnh, kết hợp với nhau, sẽ xác định định dạng. Điều này cho phép bạn linh hoạt hơn rất nhiều trong việc xác định đầu ra trông như thế nào.
Ví dụ 1 - Chuỗi định dạng chuẩn
Dưới đây là một ví dụ để chứng minh cách hoạt động của chuỗi định dạng chuẩn.
SELECT FORMAT(1234, 'C') AS Result;
Kết quả:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Trong ví dụ này, C
là chuỗi định dạng. Trong trường hợp này, đó là một chuỗi định dạng số chuẩn bao gồm một mã định dạng duy nhất. Bộ chỉ định định dạng cụ thể này được sử dụng để đại diện cho một lượng tiền tệ.
Chúng tôi cũng có thể nhận được kết quả tương tự bằng cách sử dụng chuỗi định dạng số tùy chỉnh.
Ví dụ 2 - Chuỗi định dạng tùy chỉnh
Ví dụ này tạo ra cùng một đầu ra như ví dụ trước. Sự khác biệt là, trong ví dụ này, tôi sử dụng tùy chỉnh chuỗi định dạng thay vì chuỗi tiêu chuẩn.
SELECT FORMAT(1234, '$#,###.00') AS Result;
Kết quả:
+-----------+ | Result | |-----------| | $1,234.00 | +-----------+
Một chuỗi định dạng tùy chỉnh cho phép bạn tạo định dạng tùy chỉnh của riêng mình. Bạn có thể kết hợp chuỗi với mã định dạng để tạo định dạng tùy chỉnh của riêng bạn.
Trong ví dụ này, tôi sử dụng #
định dạng xác định, là trình giữ chỗ cho một chữ số. Nếu không có chữ số thì không có chữ số nào xuất hiện trong chuỗi kết quả.
Tôi cũng sử dụng 0
định dạng định dạng, cũng là trình giữ chỗ cho bất kỳ chữ số nào. Nhưng trong trường hợp này, nếu không có chữ số, thì số 0 được sử dụng để thay thế.
Tôi cũng bao gồm $
, ,
và .
chuỗi chữ trong chuỗi định dạng. Chúng được đưa vào đầu ra chính xác như chúng vốn có.
Nếu chúng ta giảm số đầu vào, chúng ta có thể thấy kết quả khác nhau như thế nào giữa 0
và #
các chỉ định định dạng và cách chúng so sánh với C
công cụ định dạng chuẩn từ ví dụ trước:
SELECT FORMAT(34, 'C') AS 'C', FORMAT(34, '$0,000.00') AS '0', FORMAT(34, '$#,###.00') AS '#';
Kết quả:
+--------+-----------+--------+ | C | 0 | # | |--------+-----------+--------| | $34.00 | $0,034.00 | $34.00 | +--------+-----------+--------+
Như bạn có thể tưởng tượng, chuỗi định dạng tùy chỉnh cung cấp tính linh hoạt hơn nhiều so với chuỗi định dạng tiêu chuẩn.
Tuy nhiên, có nhiều trường hợp trong đó các chuỗi định dạng tiêu chuẩn có thể mạnh hơn, đặc biệt là khi tạo ra các kết quả động có tính đến văn hóa. Sẽ sớm có thêm thông tin về văn hóa.
Ví dụ 3 - Định dạng Ngày và Giờ
Giá trị ngày / giờ cũng cung cấp sự lựa chọn của chuỗi định dạng tiêu chuẩn hoặc tùy chỉnh. Dưới đây là ví dụ về giá trị ngày / giờ được định dạng bằng chuỗi định dạng chuẩn, cũng như một số chuỗi định dạng tùy chỉnh.
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd') AS 'd', FORMAT(@date, 'M/d/yyyy') AS 'M/d/yyyy', FORMAT(@date, 'dd/MM/yy') AS 'dd/MM/yy', FORMAT(@date, 'ddd, MMM dd, yy') AS 'ddd, MMM dd, yy', FORMAT(@date, 'dddd, dd MMMM yyyy') AS 'dddd, dd MMMM yyyy';
Kết quả:
+----------+------------+------------+-------------------+------------------------+ | d | M/d/yyyy | dd/MM/yy | ddd, MMM dd, yy | dddd, dd MMMM yyyy | |----------+------------+------------+-------------------+------------------------| | 5/1/2080 | 5/1/2080 | 01/05/80 | Wed, May 01, 80 | Wednesday, 01 May 2080 | +----------+------------+------------+-------------------+------------------------+
Cái đầu tiên sử dụng chuỗi định dạng chuẩn và 4 cái còn lại sử dụng chuỗi định dạng tùy chỉnh.
Để có danh sách đầy đủ các chuỗi định dạng ngày và giờ có sẵn, hãy xem phần sau:
- Danh sách các chuỗi định dạng ngày / giờ chuẩn
- Danh sách các chuỗi định dạng ngày / giờ tùy chỉnh
Ví dụ 4 - Văn hóa
Kết quả của các chuỗi định dạng đôi khi có thể phụ thuộc vào nền văn hóa đang được sử dụng. Ví dụ:ở Hoa Kỳ, định dạng ngày ngắn được biểu thị là "M / d / yyyy", nhưng ở Anh, định dạng này được biểu thị là "dd / MM / yyyy".
Theo mặc định, ngôn ngữ của phiên hiện tại được sử dụng để xác định văn hóa. Tuy nhiên, FORMAT()
cho phép bạn ghi đè điều này.
Cú pháp của hàm như sau:
FORMAT ( value, format [, culture ] )
Vì vậy, nó cho phép bạn chỉ định một nền văn hóa như một đối số tùy chọn.
Dưới đây là một ví dụ về nơi các nền văn hóa khác nhau có thể dẫn đến một chuỗi định dạng duy nhất tạo ra một số định dạng khác nhau.
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'd', 'en-us') AS 'US English', FORMAT(@date, 'd', 'en-gb') AS 'British', FORMAT(@date, 'd', 'de-de') AS 'German', FORMAT(@date, 'd', 'jp-jp') AS 'Japanese';
Kết quả:
+--------------+------------+------------+------------+ | US English | British | German | Japanese | |--------------+------------+------------+------------| | 5/1/2080 | 01/05/2080 | 01.05.2080 | 05/01/2080 | +--------------+------------+------------+------------+
Trong trường hợp này, cả bốn quốc gia đều sử dụng d
chuỗi định dạng ngày và giờ chuẩn. Tuy nhiên, tất cả họ đều sử dụng một lập luận văn hóa khác nhau. Điều này tạo ra một kết quả khác nhau để phù hợp với từng nền văn hóa.
Và nó không chỉ là tiêu chuẩn định dạng chuỗi chịu ảnh hưởng của văn hóa. Văn hóa cũng có thể ảnh hưởng đến kết quả của phong tục định dạng chuỗi. Đây là một ví dụ:
DECLARE @date datetime2(7); SET @date = '2080-05-01 23:09:08.1234567'; SELECT FORMAT(@date, 'dddd, dd MMMM', 'en-us') AS 'US English', FORMAT(@date, 'dddd, dd MMMM', 'de-de') AS 'German', FORMAT(@date, 'dddd, dd MMMM', 'vi') AS 'Vietnamese', FORMAT(@date, 'dddd, dd MMMM', 'sv') AS 'Swedish';
Kết quả:
+-------------------+------------------+----------------------+----------------+ | US English | German | Vietnamese | Swedish | |-------------------+------------------+----------------------+----------------| | Wednesday, 01 May | Mittwoch, 01 Mai | Thứ Tư, 01 Tháng Năm | onsdag, 01 maj | +-------------------+------------------+----------------------+----------------+
Bạn cũng có tùy chọn sử dụng văn hóa bất biến (iv
). Văn hóa bất biến là văn hóa vô cảm. Nó được liên kết với ngôn ngữ tiếng Anh nhưng không liên quan đến bất kỳ quốc gia / khu vực nào. Để biết thêm thông tin và ví dụ, hãy xem Cách chỉ định Văn hóa Bất biến khi sử dụng FORMAT () trong SQL Server.