如何解决'错误:运算符不存在:'?

时间:2015-02-12 09:59:15

标签: sql postgresql timestamp comparison-operators bigint

我有一个像这样创建的表:

CREATE TABLE revinfo
(
   rev integer NOT NULL,
   revtstmp bigint,
   CONSTRAINT revinfo_pkey PRIMARY KEY (rev)
)

在此表中,我有这样的数据:

rev  |revtstmp 
40815|1390021342972
40816|1390021401403
40817|1390021409057
40818|1390021409914
40819|1390021411074
40821|1390021463885
40822|1390021467889
40824|1390021469035
40826|1390021470065
40827|1390021472134
...

我想列出2015年2月10日之后的所有修订。 我试过这个请求:

select rev
from revinfo
where revtstmp > '2015-02-10 00:00:00'::timestamp

我遇到了这个错误:(见下文翻译)

ERREUR:  l'opérateur n'existe pas : bigint > timestamp without time zone
LINE 3: where revtstmp > '2015-02-12 00:00:00'::timestamp
                       ^
HINT:  Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
********** Erreur **********

ERREUR: l'opérateur n'existe pas : bigint > timestamp without time zone
État SQL :42883
Astuce : Aucun opérateur ne correspond au nom donné et aux types d'arguments.
Vous devez ajouter des conversions explicites de type.
Caractère : 47

如何更改查询?


翻译(由谷歌翻译提供)

ERROR: operator does not exist: bigint> timestamp without time zone
LINE 3: where revtstmp> '2015-02-12 0:00:00' :: timestamp
^
HINT: No operator matches the given name and argument types.
You must add explicit type conversions.
********** ********** Error

ERROR: operator does not exist: bigint> timestamp without time zone
SQL State: 42883
Tip: No operator matches the given name and argument types.
You must add explicit type conversions.
Character: 47

2 个答案:

答案 0 :(得分:3)

您的列revtstmp不是时间戳,因此您无法将其与一个进行比较。

假设它是一个“unix epoch”值,你可以很容易地将时间戳转换为bigint:

select rev
from revinfo
where revtstmp > extract(epoch from '2015-02-10 00:00:00'::timestamp);

但总的来说,最好将信息存储为timestamp列,而不是bigint。这使得许多查询更容易编写(以及阅读和理解)

答案 1 :(得分:0)

您将revtstmp存储为bigint。您无法比较时间戳和bigint。在比较中声明时间戳时,将revtstmp转换为时间戳或使用相同的格式