postgreSQL中的显式类型转换

时间:2017-01-11 10:33:05

标签: 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_items.id

其中结果列是字符变化类型,id是整数类型 但结果列中的数据包含数字(即12345)

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

2 个答案:

答案 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; - )