在SQL Server中将整数值转换为小时值(AM/PM)
我有一个在SQL Server中将整数值转换为小时值(AM/PM),sql,sql-server,tsql,sql-server-2012,Sql,Sql Server,Tsql,Sql Server 2012,我有一个表,其中有小时值。我需要将小时值转换为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
表
,其中有小时值
。我需要将小时值转换为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
。SQL Server中是否有其他方法或内置函数可以执行此操作?请尝试以下操作:
SELECT TIMEFROMPARTS(val,0,0,0,0)
FROM [table];
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)
选择CONVERT(varchar(15),CAST(CAST(@val as nvarchar)+':00:00.0000000'作为时间),100)
如果它很复杂,那么您可以创建一个函数
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 TIMEFROMPARTS(val,0,0,0,0)
FROM [table];
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)
或
在不使用格式的情况下,这应适用于SQL Server 2008及更高版本:
declare@T表(val int);
插入@T值(0)、(9)、(12)、(19);
选择val,
替换(将(varchar,CAST(CONCAT(val%24,,:00')转换为时间),109),':00.0000000',''转换为[小时]
来自@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小时以上也能工作。这里的“转换”是什么意思?在查询输出中的数据库或格式中替换?您使用的是哪个版本的sql server?@PM77-1是输出需要为AM/PMformat@SankarRajSql server 2012我注意到,TIMEFROMPARTS
功能仅在Sql 2012及更高版本上可用。在问题中未找到任何有关所用版本的信息-因此,我选择了最好的案例无论如何,如果不是在2012年,我想转换为varchar是没有办法的。不是说你错了-只是确保OP知道它适用于什么版本。如果我将15作为值传递,它会给出输出:15:00:00是的,小时:分钟:秒格式
仅在SQL Server 2012及更高版本上可用。
val hour
0 12:00 AM
9 9:00 AM
12 12:00 PM
19 7:00 PM