我有一个包含1列SQL小时整数值(0,1,2,...,23)的数据集。有没有办法将这些转换为:上午12:00,凌晨1:00,凌晨2:00,......,晚上11:00?
答案 0 :(得分:2)
您可以将:00:00
附加到整数,并使用CAST
将其转换为time
,如下所示:
SELECT CAST( CAST(int_val as VARCHAR(2))+':00:00' as time)
FROM my_table
当您升级到SQL Server 2012时,您可以使用TIMEFROMPARTS
函数执行相同的操作,而无需进行不必要的转换:
SELECT TIMEFROMPARTS(int_val, 0, 0, 0, 0)
FROM my_table
答案 1 :(得分:1)
此表达式应该有效:
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]
答案 2 :(得分:0)
使用SQL它始终是“艰难的方式”。这是一个选项(假设带有数字的列称为num
):
SELECT CAST(num AS VARCHAR) + ':00' +
CASE WHEN NUM < 12 THEN 'AM' ELSE 'PM' END Time
在SQLFiddle上查看live demo。
答案 3 :(得分:0)
你真的,真的,应该在客户端上格式化这个。对于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:00am
2:00am
...
11:00pm
答案 4 :(得分:0)
也许(可能太复杂):
SELECT Hour,
CASE WHEN Hour = 0 THEN '12:00AM'
ELSE CASE WHEN Hour = 12 THEN '12:00PM'
ELSE CASE WHEN Hour < 12
THEN CAST(Hour AS VARCHAR(7)) + ':00AM'
ELSE CAST(Hour - 12 AS VARCHAR(7)) + ':00PM'
END END END AS AM_PM
FROM dbo.Time