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

时间:2013-11-22 21:23:02

标签: sql sql-server sql-server-2008 tsql

我有一个包含1列SQL小时整数值(0,1,2,...,23)的数据集。有没有办法将这些转换为:上午12:00,凌晨1:00,凌晨2:00,......,晚上11:00?

5 个答案:

答案 0 :(得分:2)

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

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

Demo on sqlfiddle.

当您升级到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

Demo