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

Posted

技术标签:

【中文标题】修复错误:“运算符不存在:没有时区的时间戳>整数”错误【英文标题】: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 列,因此您无法将它们与整数值进行比较。你到底想在那里做什么? 【参考方案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。也许你可以在这里分享更多关于你想要完成的事情。这将帮助您获得更有针对性的答案。

【讨论】:

以上是关于修复错误:“运算符不存在:没有时区的时间戳>整数”错误的主要内容,如果未能解决你的问题,请参考以下文章

文件索引项错误 怎么修复?

数据库修复的数据库升级错误修复

如何修复 Ubuntu 中检测到系统程序错误的问题

错误修复实践

如何修复Ubuntu中检测到系统程序错误的问题?

如何修复:远程服务器返回错误:(400)错误请求