2013-11-22 49 views

回答

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] 
0

随着SQL它总是将是“硬办法”。这里有一个选项(假定与数称为num列):

SELECT CAST(num AS VARCHAR) + ':00' + 
    CASE WHEN NUM < 12 THEN 'AM' ELSE 'PM' END Time 

参见SQLFiddle一个live demo

+3

CONCAT在SQL Server 2008中不存在。 –

+0

@aaron我承认我从未使用SQL Server - 现在是否正确? – Bohemian

+0

不,这会导致无效操作(您不能添加整数和字符串)。在发布之前,您可以在http://sqlfiddle.com/上尝试您的解决方案... –

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 
+0

完全同意。只需要一个快速解决方案:) – Ray

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

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 
+0

这仍然不是什么他们以后;输出是例如'13:00:00.0000000'。 –

+0

@AaronBertrand这给OP一个“时间”类型的值,他可以根据需要将其转换为任何合理的表示。 – dasblinkenlight

相关问题