Trong SQL Server, bạn có thể sử dụng T-SQL FORMAT()
chức năng định dạng thời gian loại dữ liệu. Tuy nhiên, nếu bạn cần thêm bộ chỉ định AM / PM, bạn sẽ cần sử dụng một loại dữ liệu khác. Điều này là do thời gian kiểu dữ liệu cụ thể dựa trên đồng hồ 24 giờ và do đó thời gian được định dạng như vậy.
Ví dụ 1 - So sánh "time" với "datetime"
Dưới đây là một ví dụ để chứng minh điều gì sẽ xảy ra nếu bạn cố gắng định dạng loại dữ liệu "thời gian" bằng trình chỉ định AM / PM:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm tt') 'datetime', FORMAT(CAST('11:28:15' AS time), 'hh\:mm tt') 'time';
Kết quả:
+------------+--------+ | datetime | time | |------------+--------| | 11:28 AM | NULL | +------------+--------+
Nếu bạn cố gắng thêm bộ chỉ định AM / PM vào giá trị 'thời gian', bạn sẽ nhận được NULL
.
Do đó, nếu bạn cần thêm SA hoặc CH vào một kiểu dữ liệu thời gian, trước tiên bạn cần chuyển đổi nó sang một kiểu dữ liệu khác, sau đó định dạng nó.
Lưu ý rằng FORMAT()
hàm thực sự trả về kết quả dưới dạng một chuỗi (trừ khi kết quả là NULL
).
Nếu bạn đang thắc mắc tại sao lại có dấu gạch chéo ngược trong chuỗi định dạng thứ hai, thì điều này chỉ bắt buộc đối với thời gian kiểu dữ liệu và nó được sử dụng để thoát khỏi dấu hai chấm (và bất kỳ dấu chấm nào). Tìm hiểu thêm về điều đó tại đây.
Ví dụ 2 - Chuyển đổi "time" thành "datetime"
Ví dụ này gần giống với ví dụ trước, ngoại trừ tôi cố gắng làm cho điều này thực tế hơn. Trong phần này, tôi đặt một cách rõ ràng một biến làm kiểu dữ liệu 'thời gian' và sau đó cố gắng định dạng biến đó. Sau đó, tôi chuyển nó thành 'datetime' trước khi định dạng lại.
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CAST(@thetime AS datetime), 'hh:mm tt') 'datetime';
Kết quả:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Nếu bạn thích sử dụng CONVERT()
chức năng, đây là những gì sẽ trông như thế nào:
DECLARE @thetime time = '11:28:15' SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(CONVERT(datetime, @thetime), 'hh:mm tt') 'datetime';
Kết quả:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Hoặc bạn có thể chỉ định lại giá trị cho một biến khác thuộc loại mong muốn:
DECLARE @thetime time = '11:28:15' DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, 'hh\:mm tt') 'time', FORMAT(@thedatetime, 'hh:mm tt') 'datetime';
Kết quả:
+--------+------------+ | time | datetime | |--------+------------| | NULL | 11:28 AM | +--------+------------+
Ví dụ 3 - Người thiết kế AM / PM Single Letter
Bạn cũng có thể sử dụng một t
để chỉ định một chữ cái AM / PM chỉ định:
SELECT FORMAT(CAST('11:28:15' AS datetime), 'hh:mm t') 'AM', FORMAT(CAST('23:28:15' AS datetime), 'hh:mm t') 'PM';
Kết quả:
+---------+---------+ | AM | PM | |---------+---------| | 11:28 A | 11:28 P | +---------+---------+
Ví dụ 4 - Không sử dụng hàm FORMAT ()
FORMAT()
đã được giới thiệu trong SQL Server 2012. Nếu bạn sử dụng phiên bản SQL Server cũ hơn, bạn sẽ cần sử dụng một phương pháp khác để thêm bộ chỉ định AM / PM. Đây là một cách bạn có thể làm điều đó:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 100) Result;
Kết quả:
+----------+ | Result | |----------| | 11:28AM | +----------+
Ngoài ra, bạn có thể sử dụng thay thế 100
với 0
cho cùng một kết quả:
DECLARE @thetime time SET @thetime = '11:28:15' SELECT CONVERT(varchar(8), @thetime, 0) Result;
Kết quả:
+----------+ | Result | |----------| | 11:28AM | +----------+