Trong SQL Server, khi bạn sử dụng T-SQL FORMAT()
chức năng định dạng thời gian kiểu dữ liệu, bạn cần nhớ để thoát khỏi bất kỳ dấu hai chấm hoặc dấu chấm nào trong chuỗi định dạng của bạn.
Điều này là do FORMAT()
hàm dựa trên các quy tắc định dạng CLR, quy định rằng dấu hai chấm và dấu chấm phải được thoát ra. 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 loại dữ liệu.
Ví dụ 1 - Thoát khỏi Colon
Đây là một ví dụ cơ bản về việc sử dụng FORMAT()
chức năng định dạng thời gian kiểu dữ liệu.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\:mm') Result;
Kết quả:
+----------+ | Result | |----------| | 11:28 | +----------+
Lưu ý dấu gạch chéo ngược trong chuỗi định dạng.
Ví dụ 2 - Bỏ qua một khoảng thời gian
Điều tương tự cũng áp dụng nếu chúng ta muốn định dạng nó bằng dấu chấm:
SELECT FORMAT(CAST('11:28:15' AS time), 'hh\.mm') Result;
Kết quả:
+----------+ | Result | |----------| | 11.28 | +----------+
Ví dụ 3 - Không thoát
Dưới đây là những gì sẽ xảy ra nếu chúng ta không thoát khỏi dấu hai chấm hoặc dấu chấm.
SELECT FORMAT(CAST('11:28:15' AS time), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS time), 'hh.mm') 'Unescaped Period';
Kết quả:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | NULL | NULL | +-------------------+--------------------+
Chúng tôi nhận được NULL
trong cả hai trường hợp.
Ví dụ 4 - Ngày giờ (không cần thoát)
Bạn chỉ cần thoát khỏi dấu hai chấm và dấu chấm nếu giá trị đầu vào thuộc loại dữ liệu thời gian . Nếu đó là ngày giờ (hoặc datetime2 vv), bạn không cần phải thoát khỏi chúng.
Nếu tôi sử dụng ví dụ trước, nhưng chuyển các giá trị đầu vào thành datetime2 , chúng tôi nhận được kết quả mong muốn mà không cần phải thoát khỏi bất cứ điều gì:
SELECT FORMAT(CAST('11:28:15' AS datetime2), 'hh:mm') 'Unescaped Colon', FORMAT(CAST('11:28:15' AS datetime2), 'hh.mm') 'Unescaped Period';
Kết quả:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 11:28 | 11.28 | +-------------------+--------------------+
Điều tương tự cũng áp dụng cho sysdatetime :
SELECT FORMAT(SYSDATETIME(), 'hh:mm') 'Unescaped Colon', FORMAT(SYSDATETIME(), 'hh.mm') 'Unescaped Period';
Kết quả:
+-------------------+--------------------+ | Unescaped Colon | Unescaped Period | |-------------------+--------------------| | 04:46 | 04.46 | +-------------------+--------------------+