2013-11-22 72 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

相關問題