You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询求助:筛选全月16:00至次日06:59进入IVR的通话

解决跨天时段的SQL筛选问题

我来帮你排查这个问题——你的SQL用BETWEEN的方式其实误解了需求的时间范围逻辑,咱们一步步来解决:

为什么原语句会返回全时段记录?

你想用BETWEEN '2018-01-01 16:00:00' AND '2018-01-31 06:59:59'来筛选,但BETWEEN是连续的时间区间判断,它会包含所有在「2018-01-01 16:00」到「2018-01-31 06:59」之间的时间——这就意味着1月2日07:00到15:59的记录也会被包含进来(因为这些时间确实在你指定的首尾时间范围内),但这显然不是你要的「每天16:00之后至次日06:59」的时段。

正确的解决方案

你需要的是每天的两个时间片段:当天16:00到23:59,以及次日00:00到06:59。我们可以通过提取时间部分来判断,同时限定日期在1月范围内:

SELECT [conversationId], [conversationStart]
FROM [Customer].[dbo].[vw_Conversations]
WHERE 
    -- 确保通话日期在2018年1月全月
    CONVERT(DATE, conversationStart) BETWEEN '2018-01-01' AND '2018-01-31'
    -- 匹配符合要求的时段:16点及以后,或者6点59分及以前
    AND (CAST(conversationStart AS TIME) >= '16:00:00' OR CAST(conversationStart AS TIME) <= '06:59:59')

语句逻辑说明

  1. CONVERT(DATE, conversationStart)提取通话的日期部分,确保只筛选1月的记录;
  2. CAST(conversationStart AS TIME)提取通话的时间部分,判断是否属于「16:00之后」或者「06:59之前」——这正好覆盖了你需要的跨天时段。

你可以测试几条记录验证:比如1月2日08:00的记录会被排除,而1月2日17:00、1月3日06:00的记录会被正确返回。

内容的提问来源于stack exchange,提问作者Hussein ALSHAMIRI

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:21:58