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

如何在BigQuery中用CURRENT_DATE自动筛选昨日17点至今日6点的扫描数据?

自动筛选昨日17:00至今日06:00的扫描数据

下面针对主流数据库给出自动化的WHERE条件写法,无需手动修改日期:

MySQL/MariaDB

直接通过日期拼接生成目标时间段:

AND SCAN_START BETWEEN CONCAT(CURRENT_DATE - INTERVAL 1 DAY, ' 17:00:00') 
                    AND CONCAT(CURRENT_DATE, ' 06:00:00')

CURRENT_DATE - INTERVAL 1 DAY 获取昨日日期,与时间字符串拼接后得到昨日17:00的完整时间戳;CURRENT_DATE 拼接今日6:00的时间,精准覆盖目标区间。

PostgreSQL

通过日期加时间间隔的方式组合:

AND SCAN_START BETWEEN (CURRENT_DATE - INTERVAL '1 day') + TIME '17:00:00'
                    AND CURRENT_DATE + TIME '06:00:00'

或者更严谨的写法:

AND SCAN_START >= (CURRENT_DATE - 1)::timestamp + '17 hours'::interval
AND SCAN_START <= CURRENT_DATE::timestamp + '6 hours'::interval

SQL Server

使用DATEADD和类型转换组合时间:

AND SCAN_START BETWEEN CAST(DATEADD(DAY, -1, GETDATE()) AS DATE) + CAST('17:00:00' AS DATETIME)
                    AND CAST(GETDATE() AS DATE) + CAST('06:00:00' AS DATETIME)

CAST(GETDATE() AS DATE)提取当前日期,与时间部分拼接成完整的datetime类型。

关于此前拆分条件出错的说明

如果采用拆分日期和时间的写法,需要用OR连接两个分支条件(昨日17点后 或 今日6点前),而非AND。以MySQL为例,正确的拆分写法是:

AND (
    (DATE(SCAN_START) = CURRENT_DATE - INTERVAL 1 DAY AND TIME(SCAN_START) >= '17:00:00')
    OR
    (DATE(SCAN_START) = CURRENT_DATE AND TIME(SCAN_START) <= '06:00:00')
)

之前获取到全天数据,大概率是误将OR写成了AND,导致条件逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:43:15