postgreSQL中的显式类型转换

postgreSQL中的显式类型转换,postgresql,Postgresql,我使用下面的查询连接两个表: update campaign_items set last_modified = evt.event_time from ( select max(event_time) event_time ,result from events where request = '/campaignitem/add' group by result ) evt where evt.result = campaign_ite

我使用下面的查询连接两个表:

update campaign_items
set last_modified = evt.event_time
from (
    select max(event_time) event_time
        ,result
    from events
    where request = '/campaignitem/add'
    group by result
    ) evt
where evt.result = campaign_items.id
其中,结果列为字符变化类型,id为整数类型 但结果列中的数据包含数字(即12345)

如何将结果类型(字符)转换为id来运行此查询
(整数)

您不需要这样做,因为在这种情况下,postgresql将执行隐式类型转换。例如,你可以试试看

 select ' 12 ' = 12
您将看到它返回true,即使字符串版本中有额外的空格。尽管如此,如果需要显式转换

 where evt.result::int = campaign_items.id 
根据您的评论,您有像convRepeatDelay这样的值,这些值显然不能转换为int。然后您应该做的是将int转换为char

 where evt.result = campaign_items.id::char

有几种解决方案。您可以使用强制转换运算符::将值从给定类型强制转换为另一类型:

WHERE evt.result::int = campaign_items.id
您还可以使用CAST功能,该功能更便于携带:

WHERE CAST(evt.result AS int) = campaign_items.id
请注意,为了提高性能,可以在强制转换操作上添加索引(请注意强制使用的双括号),但随后必须使用GROUP BY result::int而不是GROUP BY result来利用索引:

CREATE INDEX i_events_result ON events_items ((result::int));

顺便说一下,最好的选择可能是将结果列类型更改为int,如果您知道它只包含整数;-)

使用::运算符(evt.result::int=campaign_items.id)您可以通过
cast(evt.result as int)
I使用您的建议运行并获得以下错误错误:整数的输入语法无效:“convRepeatDelay”其工作没有任何错误,但数据库中没有任何更改:->查询已成功返回:0行受影响,执行时间为275毫秒。特别是从这两个表中添加一些示例数据很高兴能提供帮助。错误:整数的输入语法无效:“convRepeatDelay”您能更准确地说明发生了什么错误吗?似乎结果列来自事件表,而不是活动项目表,我更新此:-)是的,您正确的“结果”和“id”分别是“事件”和“活动项目”表中的两列。哦,或者这意味着您的结果值之一是“convRepeatDelay”。你能用“SELECT*FROM events WHERE result='convRepeatDelay';”检查一下吗?哦,是的,即使我很惊讶,这也是正确的。那么我现在该怎么办呢?