【问题标题】:Fix ERROR: "operator does not exist: timestamp without time zone > integer" error修复错误:“运算符不存在:没有时区的时间戳>整数”错误
【发布时间】:2019-07-10 17:59:43
【问题描述】:

我正在尝试将查询从 Google 大查询迁移到 postgresql,但出现此错误

错误:运算符不存在:没有时区的时间戳>整数

select *, DATE(_modification_time) as modification_date, 
       CASE WHEN t_start>0 THEN DATE(t_start) END as start_date, 
       CASE WHEN _creation_time>0 THEN DATE(_creation_time) END as creation_date, 
       CASE WHEN t_finish>0 THEN DATE(t_finish) END as finish_date, 
       'WMT' as source 
from public.set_list

【问题讨论】:

  • 显然t_start_creation_timet_finish(或所有三个)被定义为timestamp 列,因此您无法将它们与整数值进行比较。你到底想在那里做什么?

标签: postgresql


【解决方案1】:

您正在尝试将 timestamp 值与整数 (0) 进行比较。这在 Postgres 中是不允许的。相反,您可以使用 extract 函数将时间戳转换为整数,并获取自 Unix 纪元 (1970-01-01 00:00:00) 开始以来的秒数,这是一个整数,然后将其与整数 0,像这样:

select *, DATE(_modification_time) as modification_date, 
       CASE WHEN extract(EPOCH FROM t_start) > 0
            THEN DATE(t_start) END as start_date, 
       CASE WHEN extract(EPOCH FROM _creation_time) > 0
            THEN DATE(_creation_time) END as creation_date, 
       CASE WHEN extract(EPOCH FROM t_finish) > 0
            THEN DATE(t_finish) END as finish_date, 
       'WMT' as source 
from public.set_list

但是,我怀疑这是否是您想要的,因为这意味着您正在比较这些值中的任何一个 t_start_creation_timet_finish 是否晚于 1970-01-01 00:00:00。也许你可以在这里分享更多关于你想要完成的事情。这将帮助您获得更有针对性的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-06
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多