Postgres - > [22007]错误:类型timestamp的输入语法无效:""

ben*_*rre 5 sql postgresql subquery

我有一个表将一些数据类型存储为字符串.有时,此值是表示时间戳的字符串.下面的查询是指加入在字段名(在RetsProvider指定)RetsEntry和RetsProvider表然后滤除"SYSTEMID"列中的值,其中所述条目的时间戳是两个时间之间.

SELECT
  *
FROM (
       SELECT
         systemid,
         cast(value AS TIMESTAMP) AS valueTS
       FROM cabarets.retsentry, cabarets.retsprovider
       WHERE cabarets.retsentry.providername = cabarets.retsprovider.name
             AND cabarets.retsentry.systemname = cabarets.retsprovider.lastupdatefield) AS foo
WHERE foo.valueTS <= now();
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,我收到错误消息.

[2013-01-09 14:04:30] [22007]错误:类型timestamp的输入语法无效:""

当我自己运行子查询时,我得到这样的数据......

SELECT
  systemid,
  cast(value AS TIMESTAMP) AS valueTS
FROM cabarets.retsentry, cabarets.retsprovider
WHERE cabarets.retsentry.providername = cabarets.retsprovider.name
      AND cabarets.retsentry.systemname = cabarets.retsprovider.lastupdatefield
Run Code Online (Sandbox Code Playgroud)

这给出了这样的输出......

systemid    valuets
'4705683'   '2012-11-08 01:37:45'
'259534632' '2012-11-15 20:40:52'
'259536713' '2012-10-16 10:57:40'
'65815875'  '2012-10-28 22:36:00'
'259540896' '2012-10-16 09:59:22'
'4707500'   '2012-11-10 01:44:58'
Run Code Online (Sandbox Code Playgroud)

问题是postgres不允许你根据作为转换字符串列的别名的列添加where子句吗?

sge*_*des 7

你有没有试过铸造你的WHERE条款:

WHERE cast(foo.valueTS AS TIMESTAMP) <= now();
Run Code Online (Sandbox Code Playgroud)

你也试过使用CURRENT_TIMESTAMP 代替now()吗?

除非有其他数据问题,否则不确定它可能是什么。