如何将 AM/PM 添加到 SQL Server (T-SQL) 中的时间值
在 SQL Server 中,可以使用 T-SQL 函数设置时间数据类型的格式。但是,如果需要添加 AM/PM 指示符,则需要使用其他数据类型。这是因为时间数据类型专门基于 24 小时制,因此时间的格式是这样的。FORMAT()
示例 1 – 比较“时间”和“日期时间”
下面是一个示例,演示了如果您尝试使用 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’;
输出:
+------------+--------+
| datetime | time |
|------------+--------|
| 11:28 AM | NULL |
+------------+--------+如果尝试将 AM/PM 指示符添加到“时间”值,则得到 .NULL
因此,如果需要将 AM 或 PM 添加到时间数据类型,则需要先将其转换为另一种数据类型,然后再设置其格式。
请注意,FORMAT() 函数实际上无论如何都会将结果作为字符串返回(除非结果是 )。NULL
如果您想知道为什么第二个格式字符串中有反斜杠,这仅适用于 time 数据类型,并且用于转义冒号(和任何句点)。更多关于这一点的信息 这里.
示例 2 – 将“时间”转换为“日期时间”
此示例与前面的示例几乎相同,只是我尝试使其更逼真。在这个中,我显式地将变量设置为“time”数据类型,然后尝试对其进行格式化。然后,我将其转换为“日期时间”,然后再对其进行格式化。
DECLARE @thetime time = ‘11:28:15’ SELECT FORMAT(@thetime, ‘hh:mm tt’) ’time’, FORMAT(CAST(@thetime AS datetime), ‘hh:mm tt’) ‘datetime’;
输出:
+--------+------------+
| time | datetime |
|--------+------------|
| NULL | 11:28 AM |
+--------+------------+如果您更喜欢使用该函数,如下所示:CONVERT()
DECLARE @thetime time = ‘11:28:15’ SELECT FORMAT(@thetime, ‘hh:mm tt’) ’time’, FORMAT(CONVERT(datetime, @thetime), ‘hh:mm tt’) ‘datetime’;
输出:
+--------+------------+
| time | datetime |
|--------+------------|
| NULL | 11:28 AM |
+--------+------------+或者,您可以将值重新分配给所需类型的另一个变量:
DECLARE @thetime time = ‘11:28:15’ DECLARE @thedatetime datetime = @thetime SELECT FORMAT(@thetime, ‘hh:mm tt’) ’time’, FORMAT(@thedatetime, ‘hh:mm tt’) ‘datetime’;
输出:
+--------+------------+
| time | datetime |
|--------+------------|
| NULL | 11:28 AM |
+--------+------------+示例 3 – 单字母 AM/PM 指示符
您还可以使用单个字母来指定单个字母的 AM/PM 指示符:t
SELECT FORMAT(CAST(‘11:28:15’ AS datetime), ‘hh:mm t’) ‘AM’, FORMAT(CAST(‘23:28:15’ AS datetime), ‘hh:mm t’) ‘PM’;
输出:
+---------+---------+
| AM | PM |
|---------+---------|
| 11:28 A | 11:28 P |
+---------+---------+示例 4 – 不使用 FORMAT() 函数
该函数是在 SQL Server 2012 中引入的。如果使用早期版本的 SQL Server,则需要使用其他方法来添加 AM/PM 指示符。这是您可以做到这一点的一种方法:FORMAT()
DECLARE @thetime time SET @thetime = ‘11:28:15’ SELECT CONVERT(varchar(8), @thetime, 100) Result;
输出:
+----------+
| Result |
|----------|
| 11:28AM |
+----------+或者,您可以使用替换为来获得相同的结果:100``0
DECLARE @thetime time SET @thetime = ‘11:28:15’ SELECT CONVERT(varchar(8), @thetime, 0) Result;
输出:
+----------+
| Result |
|----------|
| 11:28AM |
+----------+