如何解决是否有一个函数可以添加和计算此查询中的时间?
我有一个带有 [ID] 、[Timestamp] 和 [Message] 的表。
[时间戳] 采用“2021-03-31 22:37:09.580”格式,我想计算顾问回答网络聊天转换所需的时间。 到目前为止,我有以下内容
我想将 [Timestamp] 添加到其中任何一条消息中,然后计算每条消息之间的差异。
当前查询返回以下内容
有人可以帮忙吗?
select
[message],NextMessage
from (
select id,[message],lead([message]) over (order by id) as NextMessage
from bot.ConversationsResolved
) as t
where [message] = ('You''re being connected to the next available advisor.')
解决方法
正如其他一些用户提到的“很有帮助”,您可以在 Microsoft 的 SQL Server 文档中找到 datediff
函数的语法:
https://docs.microsoft.com/en-us/sql/t-sql/functions/datediff-transact-sql?view=sql-server-ver15
由此您可以看到,您需要指定一个 datepart
,它是您想要衡量的时间单位以及您想要衡量的开始和结束日期。您在 select
语句中使用它,它会在新列中返回值:
select StartDate,EndDate,datediff(day,StartDate,EndDate) as DayBoundariesCrossed
from YourTable
您会注意到,我已将该列称为 DayBoundariesCrossed
,因为它是 datediff
函数实际返回的内容。通过将 day
指定为我们的 datepart
,我们可以获得您在这两个日期之间从一天进入下一天的次数。如果我们指定了 year
,它将是跨越的年份边界数。
这会产生一个潜在的陷阱,称为围栏问题,其中返回的值可能比您实际想要的值小 1;例如,今天和明天之间的 datediff
只是一个 day
边界,尽管您可能希望将其视为涵盖两天。在这些情况下,您只需将 datediff
的结果加 1。
一个稍微更具挑战性的结果要求您始终使用最合适的 datepart
进行计算,因为“越过边界”的结果并不总是理想的。
例如这个脚本:
select datediff(year,'2020-12-31 23:59:59','2021-01-01 00:00:00') as YearBoundaries,datediff(month,'2021-01-01 00:00:00') as MonthBoundaries,'2021-01-01 00:00:00') as DayBoundaries,datediff(hour,'2021-01-01 00:00:00') as HourBoundaries,datediff(minute,'2021-01-01 00:00:00') as MinuteBoundaries,datediff(second,'2021-01-01 00:00:00') as SecondBoundaries
将输出以下内容,这可能不是我们想要的:
年界 | 月份边界 | DayBoundaries | HourBoundaries | 分钟边界 | 次要边界 |
---|---|---|---|---|---|
1 | 1 | 1 | 1 | 1 | 1 |
为了解决这个问题,您可以在比您实际所追求的更高的细节级别上指定 datepart
并进行划分 - 例如datediff(month,EndDate) / 12.0
获得年份分数 - 尽管即使在这里也可能存在您需要注意的陷阱。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。