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

PostgreSQL查询指定日期前1个月记录时遇SQL语法错误的解决方法

报错根源

问题出在括号的不匹配和非法嵌套,完全打破了BETWEEN的语法规则:

  • 冗余嵌套:原语句在BETWEEN后面多加了一层左括号,把BETWEEN要连接的两个区间值、以及中间的AND关键字全包裹进了同一个括号块里
  • 括号错配:结尾位置多出来一个找不到对应左括号的右括号,解析器走到这个位置时无法匹配语法规则,直接抛出语法错误。
修正后的基础查询

去掉多余的嵌套括号,按照标准字段 BETWEEN 区间起始值 AND 区间结束值的结构写,就能正常跑通:

select * from my_data 
where name = 'customer' 
  and time between ('2021-03-24'::date - '1 month'::interval) 
             and '2021-03-24'::date;

这个语句可以直接实现“查询name为customer、时间在给定日期往前推1个月到给定日期当天零点之间”的记录。

更稳妥的边界优化

如果time字段是带时分秒的时间戳类型,上面的写法只会抓到截止2021-03-24 00:00:00的记录,漏掉当天零点之后产生的所有数据。如果需要覆盖给定日期当天的全时段数据,可以改用范围比较的写法,绕开BETWEEN的边界截断问题:

select * from my_data 
where name = 'customer' 
  and time >= ('2021-03-24'::date - '1 month'::interval)
  and time < ('2021-03-24'::date + '1 day'::interval);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 09:15:00