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

如何编写CASE语句实现CURRENT_TIMESTAMP减30分钟的时间区间判断

首先明确判断逻辑:当max(timestamp)大于当前时间往前推30分钟的时间节点时,说明属于最近30分钟范围,返回Yes,否则返回No。

你之前的写法报错是因为CURRENT_TIMESTAMP返回的是原生时间戳类型,不是数值格式的Unix时间戳,不能直接和小数做算术运算,不同数据库的时间间隔运算语法有差异,以下是主流数据库的可用实现:

MySQL / MariaDB

使用DATE_SUB函数指定时间间隔:

CASE
    WHEN max(timestamp) > DATE_SUB(CURRENT_TIMESTAMP, INTERVAL 30 MINUTE) THEN 'Yes'
    ELSE 'No'
END

如果需要判断最近1小时,把30 MINUTE替换为1 HOUR即可。

PostgreSQL

直接对时间戳做间隔运算:

CASE
    WHEN max(timestamp) > CURRENT_TIMESTAMP - INTERVAL '30 minutes' THEN 'Yes'
    ELSE 'No'
END

SQL Server

使用DATEADD函数,注意参数顺序为「时间单位、偏移量、基准时间」:

CASE
    WHEN max(timestamp) > DATEADD(MINUTE, -30, CURRENT_TIMESTAMP) THEN 'Yes'
    ELSE 'No'
END

Oracle

可以通过NUMTODSINTERVAL明确指定时间间隔类型:

CASE
    WHEN max(timestamp) > CURRENT_TIMESTAMP - NUMTODSINTERVAL(30, 'MINUTE') THEN 'Yes'
    ELSE 'No'
END

如果你习惯用Unix时间戳做数值计算,也可以先把时间类型转成秒级数值再运算,以MySQL为例:

CASE
    WHEN UNIX_TIMESTAMP(max(timestamp)) > UNIX_TIMESTAMP() - 1800 THEN 'Yes'
    ELSE 'No'
END

注:原写法的两个WHEN分支没有覆盖max(timestamp)和基准时间相等的场景,会返回NULL,用ELSE替代第二个WHEN逻辑更严谨。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:18:02