gpt4 book ai didi

sql-server - SQL查询-日期时间的平均时间字段

转载 作者:行者123 更新时间:2023-12-03 10:00:22 28 4
gpt4 key购买 nike

我在为一个简单的SQL查询而苦苦挣扎。运行SQL Server 2014

我有一个SQL表“Visits”:

Id | EntryTime | Duration

我想找到两个日期之间的平均条目TIME OF DAY,并考虑到这些日期之间的所有记录。

因此,如果我的日期之间的 EntryTime字段为:
2016-04-28 12:00:00
2016-04-20 10:00:00
2016-04-19 08:00:00
2016-04-17 10:00:00

那么返回的平均时间应该是:
10:00:00

完全不应该考虑日期,它应该以字符串格式或仅返回 10:00:00的方式返回。

最佳答案

create table mytimes(
id int identity,
mydatetime datetime
)

insert into mytimes (mydatetime) values ('2016-04-28 12:00:00')
insert into mytimes (mydatetime) values ('2016-04-20 10:00:00')
insert into mytimes (mydatetime) values ('2016-04-19 08:00:00')
insert into mytimes (mydatetime) values ('2016-04-17 10:00:00')

SELECT Cast(DateAdd(ms, AVG(CAST(DateDiff( ms, '00:00:00', cast(mydatetime as time)) AS BIGINT)), '00:00:00' ) as Time )
from mytimes
-- where mydatetime between XXX and YYY

SELECT convert(varchar(8), Cast(DateAdd(ms, AVG(CAST(DateDiff( ms, '00:00:00', cast(mydatetime as time)) AS BIGINT)), '00:00:00' ) as Time ))
from mytimes
-- where mydatetime between XXX and YYY

output-1 10:00:00.0000000-这是实际的时间类型,您可以根据需要进行更多操作

输出2 10:00:00-输出为varchar(8)

添加您认为合适的where子句

步骤包括
  • Time转换为DateTime类型。
  • AVG上使用Time,此类型不受Time的支持,因此您必须首先将Time转换为毫秒。
  • 将毫秒转换回Time类型
  • 为了避免使用Arithmetic overflow error converting expression to data type int,可以将DateAdd的结果转换为BigInt。另外,您可以在seconds函数中使用milliseconds而不是DateDiff,除非您的结果集太大,否则应该可以使用。

  • SO来源:
  • T-SQL calculating average time
  • How to get Time from DateTime format in SQL?
  • Operand data type time is invalid for avg operator…?
  • 关于sql-server - SQL查询-日期时间的平均时间字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918120/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com