将整数值转换为SQL Server中的小时值(AM / PM)

时间:2016-07-12 13:10:33

标签: sql sql-server tsql sql-server-2012

我有values小时AM/PM。我需要将小时值转换为val hour --------------- 9 9:00 AM 19 7:00 PM 10 10:00 AM 19 7:00 PM 14 2:00 PM 格式,如下所示:

declare @timing varchar(5)='15:02'

declare @time time=cast(@timing as time)
select convert(varchar(50),@time, 100)

我试过这个逻辑:

val

但这需要varchar转换为C1。 SQL Server中是否有任何其他方法或内置函数可以执行此操作?

6 个答案:

答案 0 :(得分:2)

尝试以下方法:

SELECT TIMEFROMPARTS(val,0,0,0,0)
  FROM [table];

答案 1 :(得分:2)

尝试以下方法:

declare @timing varchar(5)='14'

declare @time time=cast(case when CHARINDEX(':',@timing)=0 then @timing + ':00' else @timing end as time)
select convert(varchar(50),@time, 100)

或者

Select convert(varchar(50),cast(Cast(val as varchar) + ':00' as time),100) FROM YourTable

答案 2 :(得分:1)

SELECT FORMAT(DATEADD(hh,val,'00:00:00'),'hh:mm tt') 
FROM YourTable

答案 3 :(得分:1)

select CONVERT(varchar(15),CAST( cast(@val as nvarchar) + ':00:00.0000000' AS TIME),100)

答案 4 :(得分:1)

如果它很复杂,那么你可以创建一个函数。

CREATE FUNCTION dbo.fn_StringHourToAmPm (@timing VARCHAR(250))
RETURNS VARCHAR(250)
AS BEGIN        

    DECLARE @time TIME = CAST(@timing AS TIME)
    DECLARE @Output NVARCHAR(50)
    select @Output = CONVERT(VARCHAR(50),@time, 100)

    RETURN @Output
END

然后

SELECT dbo.fn_StringHourToAmPm('15:02') -- 3:02PM

答案 5 :(得分:1)

不使用FORMAT,这应该适用于SQL Server 2008及更高版本:

declare @T table (val int);

insert into @T values (0),(9),(12),(19);

select val, 
replace(convert(varchar, CAST(CONCAT(val%24,':00') as time), 109),':00.0000000',' ') as [hour] 
from @T;

基本上,将INT转换为109预定义格式的VARCHAR并清理它。

或者在将INT转换为DATETIME之后使用FORMAT:

select val, FORMAT(DATEADD(HH,val%24,0),'h:mm tt') as [hour] from @T;

两种方法都会返回:

val hour
0   12:00 AM
9   9:00 AM
12  12:00 PM
19  7:00 PM

请注意,模数(val%24)已添加。这只是让它在23岁以上工作了几个小时。