我使用以下查询加入这两个表:
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来运行此查询 (整数)
答案 0 :(得分:2)
嗯,你不需要,因为postgresql会在这种情况下进行隐式类型转换。例如,您可以尝试
select ' 12 ' = 12
即使字符串版本中有额外的空格,您也会看到它返回true。不过,如果你需要明确的转换。
where evt.result::int = campaign_items.id
根据你的评论,你有像convRepeatDelay这样的值,这些显然无法转换为int。你应该做的是将你的int转换为char !!
where evt.result = campaign_items.id::char
答案 1 :(得分:1)
有几种解决方案。您可以使用cast operator ::将给定类型的值转换为另一种类型:
WHERE evt.result::int = campaign_items.id
您还可以使用更便携的CAST功能:
WHERE CAST(evt.result AS int) = campaign_items.id
请注意,为了提高性能,您可以在转换操作上添加索引(请注意必需的双括号),但是您必须使用GROUP BY result :: int而不是GROUP BY结果来利用索引:
CREATE INDEX i_events_result ON events_items ((result::int));
顺便说一下,如果您知道它只包含整数,那么最好的选择可能是将结果列类型更改为int; - )