2017-10-05 136 views
0

我试图执行以下查询:PostgreSQL - 将varchar转换为int?

DELETE FROM table_name WHERE ID>9; 

,但我不能,因为“ID”字段类型为“VARCHAR”的。 我如何将它转换为'int'并使它正常工作? (删除ID大于9的所有行,而不是将其转换为数值varchar值)

+1

'DELETE FROM table_name WHERE ID :: int> 9;' –

+3

如果您预见需要将ID作为数字处理,请考虑将其存储在数字列中,而不是文本。 –

+0

尝试你的第一个解决方案,我得到了整数的无效输入语法:“” – Gambit2007

回答

3

我不知道为什么要将数字值存储为字符串。您可能需要更多的东西一样:

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

相关问题