修复错误:“运算符不存在:没有时区的时间戳>整数”错误
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_time
或t_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_time
和 t_finish
是否晚于 1970-01-01 00:00:00。也许你可以在这里分享更多关于你想要完成的事情。这将帮助您获得更有针对性的答案。
【讨论】:
以上是关于修复错误:“运算符不存在:没有时区的时间戳>整数”错误的主要内容,如果未能解决你的问题,请参考以下文章