Sql 博士后->;[22007]错误:类型时间戳的输入语法无效&引用;

Sql 博士后->;[22007]错误:类型时间戳的输入语法无效&引用;,sql,postgresql,subquery,Sql,Postgresql,Subquery,我有一个以字符串形式存储大量数据类型的表。有时,该值是表示时间戳的字符串。下面的查询旨在连接字段名(在RetsProvider中指定)上的RetsEntry和RetsProvider表,然后过滤掉条目时间戳介于两次之间的“systemid”列值 SELECT * FROM ( SELECT systemid, cast(value AS TIMESTAMP) AS valueTS FROM cabarets.retsentry,

我有一个以字符串形式存储大量数据类型的表。有时,该值是表示时间戳的字符串。下面的查询旨在连接字段名(在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();
这样的输出

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
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'

问题是postgres不允许您基于作为强制转换字符串列别名的列添加where子句吗?

您是否尝试强制转换
where
子句:

WHERE cast(foo.valueTS AS TIMESTAMP) <= now();

WHERE cast(foo.valueTS作为时间戳)您的问题是数据无效。这是使用适当数据类型的一个重要原因,这样您就可以捕获输入中的错误,而不是稍后进行排序。您可以执行以下操作来更正:

UPDATE the_table
   SET value_ts = '1900-01-01 00:00:00'
 WHERE value_ts ~ '[ ]+';

但我担心的是,如果这是一个问题,您会发现更多。

我想说的是,在某个地方有一个只有空格的值(
“”
),不能转换为时间戳。另一个不在varchar列中存储日期或时间戳的好理由!您可以使用
select*从带有\u no \u名称的\u表where valueTS~'[]+'
@a\u horse\u中查找这些行如果您想添加它作为答案,我将很乐意向上投票。您是否尝试过在没有where条件的情况下运行查询(但保留子查询)?它是否返回值的任何空白(“”)记录?