如何将 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  |
+----------+