我有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中是否有任何其他方法或内置函数可以执行此操作?
答案 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岁以上工作了几个小时。