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

BETWEEN与LIKE组合语法报错求助:PostgreSQL日期范围查询问题

解决带时区时间戳的日期范围查询SQL错误

错误原因

你的SQL语句存在语法错误:BETWEEN 运算符的两端不能搭配 LIKE 使用,LIKE 是字符串匹配运算符,不能作为BETWEEN的边界值,这直接触发了"type 'like' does not exist"的报错。

正确解决方案

针对带时区时间戳(timestamptz类型)的日期范围查询,推荐直接操作时间类型而非转换为字符串,以下是两种高效的实现方式:

方式1:精确时间区间匹配(推荐)

通过指定当天的起始和结束时间戳来匹配,能利用索引,效率最高:

SELECT *
FROM aqua.reading
WHERE pres_date >= '2022-10-18T00:00:00+00:00'::timestamptz
  AND pres_date < '2022-10-19T00:00:00+00:00'::timestamptz;

注:可根据你的时区调整时间偏移(比如+08:00代表东八区),或直接使用不带时区的日期字符串,数据库会自动根据会话时区转换。

方式2:使用日期函数提取日期

如果只需要匹配日期部分,可以用DATE()函数提取timestamptz的日期:

SELECT *
FROM aqua.reading
WHERE DATE(pres_date) = '2022-10-18';

不推荐的字符串匹配方式(仅作参考)

如果一定要通过字符串匹配实现(会丢失索引优化,效率低),正确写法是直接用LIKE,不需要BETWEEN:

SELECT *
FROM aqua.reading
WHERE CAST(pres_date AS VARCHAR) LIKE '2022-10-18%';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:45:23