PostgreSQL处理时间区间时datetime函数不存在报错如何解决?
问题原因
报错是因为你使用了非PostgreSQL原生的时间处理函数:DATETIME()、DATETIME_SUB()是MySQL、BigQuery等数据库的语法,PostgreSQL不支持这两个函数,原生提供了更简洁的时间运算规则。
修正方案
你可以按以下规则调整SQL语法:
- PostgreSQL的
timestamp/timestamptz类型可以直接做大小比较,不需要额外用函数转换格式 - 时间偏移运算直接通过
时间值 ± INTERVAL 'n 单位'实现,不需要调用专门的偏移函数 - 逻辑运算中
AND优先级高于OR,建议给需要组合的条件加括号,避免出现不符合预期的逻辑判断 - 建议给
CASE语句补充ELSE分支,否则不满足条件时status字段会返回NULL
修正后的SQL示例:
SELECT CASE WHEN CAST(so.scheduled_delivery_time AS date) < CURRENT_DATE OR ( CAST(so.scheduled_delivery_time AS date) = CURRENT_DATE AND so.scheduled_delivery_time < CURRENT_TIMESTAMP - INTERVAL '3 hours' ) THEN 'Late' ELSE 'On Time' -- 可根据你的实际需求调整 ELSE 分支的返回值 END AS status FROM table1 so
如果你使用的scheduled_delivery_time是带时区的类型,把CURRENT_TIMESTAMP替换为LOCALTIMESTAMP即可适配本地时区判断。
内容的提问来源于stack exchange,提问作者Shadow Walker
相关产品推荐
相关产品推荐

