2015-11-06 195 views
1

我有一个sqlite3数据库。其中一列大多数是整数值(正值或负值)。在少数情况下,该值为“未找到”或“缺失”或其他文本字符串。用NULL替换字符串的实例

我想用NULL替换所有那些非整数值。列类型是TEXT超出原始必要性。

是否有一个聪明的方法来做到这一点与UPDATE ... WHERE子句,而不是总的东西,就像拉到python更正?

回答

3

您可以使用UPDATE用正则表达式,像这样:

UPDATE MyTable 
SET text_column = NULL 
WHERE text_column REGEXP '[^-0-9]+' 

这将清除掉包含一个或多个非数字字符的所有领域。

+2

我也建议这样做后更改列的类型为数字。 –

+0

默认情况下不执行REGEXP。 –

+0

是的,这看起来像一个光滑的解决方案,直到我发现REGEXP不是默认功能。没有找到关于如何安装它的明确说明,以便我可以使用从命令行调用它以及通过我的Python脚本进行访问。 – user3556757

2

您可以更新其中的值不能转换成整数的所有行:

UPDATE MyTable 
SET MyColumn = NULL 
WHERE CAST(MyColumn AS INTEGER) != MyColumn;