Tsql T-SQL持续时间(小时:分钟:秒)
我有几个日期之间的平均持续时间(日期时间格式),即1900-01-01:30.00.00。 如何将DATETIME转换为小时:分钟:秒格式,其中小时可以超过24小时-输出格式可以是VARCHAR 即 等等Tsql T-SQL持续时间(小时:分钟:秒),tsql,duration,Tsql,Duration,我有几个日期之间的平均持续时间(日期时间格式),即1900-01-01:30.00.00。 如何将DATETIME转换为小时:分钟:秒格式,其中小时可以超过24小时-输出格式可以是VARCHAR 即 等等 DECLARE @date1 DATETIME = '2011-08-03 13:30' DECLARE @date2 DATETIME = '2011-08-03 13:00' DECLARE @date3 DATETIME = '2011-08-03 14:00' DECLARE @abc
DECLARE @date1 DATETIME = '2011-08-03 13:30'
DECLARE @date2 DATETIME = '2011-08-03 13:00'
DECLARE @date3 DATETIME = '2011-08-03 14:00'
DECLARE @abc DATETIME = '2011-08-03 12:00'
select CAST(AVG(CAST(data-@abc as float)) as datetime)
from
(
select 'data' as label, @date1 as data
union all
select 'data' as label, @date2 as data
union all
select 'data' as label, @date3 as data
) as a
group by label
我想得到的结果是01:30:00,这意味着平均时间是1小时30分钟
我试过:
CONVERT(VARCHAR(10), CAST(AVG(CAST(data-@abc as float)) as datetime), 108)
但我只得到了HH:MM:SS中的时间部分。当我设置@abc=2011-08-02时,结果将是相同的-这是不正确的
国王问候,
马辛
结果:
1:30:00
在T-SQL中,datetime就是一个日期和一个时间,在这个日期和时间中,小时数永远不能超过24小时,因为这会将它移动到第二天。您可以使用datepart将datetime值分割出来,并将其视为整数,然后将它们重新连接到所需的字符串中。根据您的最终目标,您最好在应用程序或表示层中执行此类工作,因为在这些层中,更通用的语言通常有更强大的日期时间库可供使用。您无法将日期时间转换为处理非真实日期和时间 但是,只需将小时字符串与“:”和分钟等连接起来,就可以获得类似于datetime的输出
查找
DATEADD()
和DATEDIFF()
函数…我认为您需要编写一个标量值函数,该函数采用整数参数(时间差以秒为单位),并根据需要对其进行格式化。比如说,
CREATE FUNCTION intToDateTime ( @time_in_secs BIGINT) RETURNS VARCHAR(30)
AS
BEGIN
DECLARE @retval VARCHAR(30);
SET @retval = cast(@time_in_secs/(60*60) as varchar(10))+':'+
cast( (@time_in_secs-@time_in_secs/(60*60)*3600)/60 as varchar(10))+':'+
cast( (@time_in_secs-@time_in_secs/(60)*60) as varchar(10));
return @retval;
END
此函数需要一些更改-您可能希望显示0-9的前导零(例如“00”而不是此函数当前的“0”);您还需要以更好的方式处理负值。现在您可以将其与
DATEDIFF(second,@val1,@val2)
一起使用希望我给你指明了正确的方向
1:30:00
CREATE FUNCTION intToDateTime ( @time_in_secs BIGINT) RETURNS VARCHAR(30)
AS
BEGIN
DECLARE @retval VARCHAR(30);
SET @retval = cast(@time_in_secs/(60*60) as varchar(10))+':'+
cast( (@time_in_secs-@time_in_secs/(60*60)*3600)/60 as varchar(10))+':'+
cast( (@time_in_secs-@time_in_secs/(60)*60) as varchar(10));
return @retval;
END