Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL Server中将整数值转换为小时值(AM/PM)_Sql_Sql Server_Tsql_Sql Server 2012 - Fatal编程技术网

在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