Sql 将整数(0,1,2…,23)转换为小时(上午/下午)

Sql 将整数(0,1,2…,23)转换为小时(上午/下午),sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个数据集,其中有一列SQL小时整数值(0,1,2,…,23)。有没有办法把这些转换成:12:00am,1:00am,2:00am,11:00pm???此表达式应适用于: CASE WHEN [Hour] = 0 THEN '12:00am' WHEN [Hour] < 12 THEN CAST([Hour] AS VarChar) + ':00am' WHEN [Hour] = 12 THEN '12:00pm' ELSE CAST(([Hour]-12

我有一个数据集,其中有一列SQL小时整数值(0,1,2,…,23)。有没有办法把这些转换成:12:00am,1:00am,2:00am,11:00pm???

此表达式应适用于:

CASE WHEN [Hour] = 0 THEN '12:00am'
     WHEN [Hour] < 12 THEN CAST([Hour] AS VarChar) + ':00am'
     WHEN [Hour] = 12 THEN '12:00pm'
     ELSE CAST(([Hour]-12) AS VarChar) + ':00pm'
END AS [Time]
如果[Hour]=0,则为“12:00am”
当[Hour]<12时,将[Hour]转换为VarChar)+':00am'
当[Hour]=12时,则为“12:00pm”
ELSE将([Hour]-12)转换为VarChar)+':00pm'
以[时间]结束

对于SQL来说,这永远是一条“艰难之路”。这里有一个选项(假设带有数字的列名为
num
):

选择CAST(numas VARCHAR)+':00'+
如果NUM<12,则为'AM'或'PM'结束时间

在SQLFIDLE上查看。您真的,真的,真的应该在客户端上格式化它。对于SQL Server来说,这并不是一项很好的工作,我不理解在t-SQL中执行这项工作的目的

DECLARE @t TABLE(i INT);

INSERT @t(i) VALUES(0),(1),(2), ... ,(23);

SELECT LOWER(RIGHT(CONVERT(CHAR(19),DATEADD(HOUR,i,0),0),7)) FROM @t ORDER BY i;
结果:

12:00am
凌晨1点
凌晨2点
...
晚上11:00
也许(可能太复杂了):

选择小时,
当小时数=0时,则为“12:00AM”
否则,当小时数=12时,则为“12:00PM”
小时<12时的其他情况
然后播放(小时为VARCHAR(7))+':00AM'
ELSE演员阵容(第12小时为VARCHAR(7))+':00PM'
以上午/下午结束
来自dbo.Time

您可以将
:00:00
附加到整数,然后使用
CAST
将其转换为
time
,如下所示:

SELECT CAST( CAST(int_val as VARCHAR(2))+':00:00' as time)
FROM my_table

升级到SQL Server 2012时,您将能够使用函数执行相同的操作,而无需进行不必要的转换:

SELECT TIMEFROMPARTS(int_val, 0, 0, 0, 0)
FROM my_table

CONCAT在SQL Server 2008中不存在。@aaron我承认我从未使用过SQL Server-现在正确吗?不,这将导致无效操作(不能添加整数和字符串)。您可以在发布之前尝试您的解决方案…完全同意。只是需要一个快速的解决方案:)这仍然不是他们想要的;例如,输出为
13:00:00.0000000
@AaronBertrand这给了OP一个类型为“time”的值,他可以根据需要将该值转换为任何合理的表示形式。
SELECT CAST( CAST(int_val as VARCHAR(2))+':00:00' as time)
FROM my_table
SELECT TIMEFROMPARTS(int_val, 0, 0, 0, 0)
FROM my_table