PostgreSQL - 将varchar转换为int?
问题描述:
我试图执行以下查询:PostgreSQL - 将varchar转换为int?
DELETE FROM table_name WHERE ID>9;
,但我不能,因为“ID”字段类型为“VARCHAR”的。 我如何将它转换为'int'并使它正常工作? (删除ID
大于9的所有行,而不是将其转换为数值varchar
值)
答
我不知道为什么要将数字值存储为字符串。您可能需要更多的东西一样:
DELETE FROM table_name
WHERE regexp_matches(ID, '^[1-9][0-9]');
这从两个数字,第一个是不0
启动表的任何id
删除。如果您尝试进行转换,那么如果不是所有ID均为数字,则可能会出现转换错误。这也适用于可能溢出int的长数字(尽管numeric
可以解决该问题)。
编辑:
对于一个通用的解决方案,我想我会写为:
where (case when regexp_matches(id, '^[0-9]+$')
then id::numeric
end) > 70000
的case
应防止对非数字id
小号任何错误。
+0
我正在处理别人的项目,而不是我的项目。我真的不明白你的解决方案,我怎么能概括它呢?像'WHERE ID> 70000' – Gambit2007
'DELETE FROM table_name WHERE ID :: int> 9;' –
如果您预见需要将ID作为数字处理,请考虑将其存储在数字列中,而不是文本。 –
尝试你的第一个解决方案,我得到了整数的无效输入语法:“” – Gambit2007