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

PostgreSQL中TEXT转TIMESTAMP及BETWEEN查询报错问题

解决PostgreSQL中TEXT类型日期用BETWEEN查询的报错问题

这个错误的根源很直白:你的entry_date列是TEXT类型,但你在查询里把比较值转换成了timestamp类型,PostgreSQL没有定义text >= timestamp这类跨类型比较的运算符,所以直接报错了。下面给你两种可行的解决方案:

方案一:修改视图,将TEXT列转为timestamp类型(推荐长期使用)

既然视图里的日期本来就是标准时间戳格式,不如直接在视图定义里把它转换成timestamp类型,这样后续所有查询都不用再重复转换,还能彻底避免类型不匹配的问题。

执行类似这样的语句重新创建视图:

CREATE OR REPLACE VIEW v_view AS
SELECT 
    id,
    -- 注意匹配你的日期格式:日/月/年 小时:分钟
    to_timestamp(entry_date, 'DD/MM/YYYY HH24:MI')::timestamp AS entry_date
FROM 你的原表名称;

之后再执行你原本的查询(记得修正之前的笔误:entrada应该是entry_date),就能正常运行了。

方案二:查询时临时转换TEXT列的类型(临时应急方案)

如果暂时没办法修改视图,那就在WHERE子句里先把TEXT类型的entry_date转换成timestamp,让两边比较的类型保持一致:

SELECT id, entry_date 
FROM v_view 
WHERE to_timestamp(entry_date, 'DD/MM/YYYY HH24:MI')::timestamp 
      BETWEEN to_timestamp('20/03/2018 00:00','DD/MM/YYYY HH24:MI')::timestamp 
          AND to_timestamp('22/03/2018 00:00','DD/MM/YYYY HH24:MI')::timestamp 
ORDER BY to_timestamp(entry_date, 'DD/MM/YYYY HH24:MI')::timestamp;

⚠️ 重要提醒:不要直接用TEXT字符串做日期比较!比如直接写entry_date BETWEEN '20/03/2018 00:00' AND '22/03/2018 00:00',这种字符串比较是按字典序来的,会出现逻辑错误(比如'31/12/2023'会被认为比'01/01/2024'大)。

另外提一句:你原查询里写的是WHERE entrada BETWEEN,但列名是entry_date,这应该是笔误,记得修正,不然会报找不到列的错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:21:26