PostgreSQL - 将varchar转换为int?

时间:2017-10-05 15:39:05

标签: sql postgresql

我试图执行以下查询:

DELETE FROM table_name WHERE ID>9;

但我不能自“ID'字段属于' varchar'。 我怎样才能把它投射到' int'并让它正常行事? (删除ID大于9的所有行,而不是将其转换为数字varchar

1 个答案:

答案 0 :(得分:3)

我不知道你为什么要将数值存储为字符串。你可能想要更像的东西:

DELETE FROM table_name
    WHERE regexp_matches(ID, '^[1-9][0-9]');

这将从表中删除以两位数字开头的任何id,其中第一位不是0。如果您尝试转换,那么如果并非所有ID都是数字,则可能会出现转换错误。这也适用于会溢出int的长数(虽然numeric会解决这个问题)。

编辑:

对于一般解决方案,我想我会把它写成:

where (case when regexp_matches(id, '^[0-9]+$')
            then id::numeric
       end) > 70000

case可以防止非数字id上的任何错误。