我试图执行以下查询:
DELETE FROM table_name WHERE ID>9;
但我不能自“ID'字段属于' varchar'。
我怎样才能把它投射到' int'并让它正常行事? (删除ID
大于9的所有行,而不是将其转换为数字varchar
值
答案 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
上的任何错误。