【发布时间】:2014-02-03 03:24:49
【问题描述】:
好的,所以我有一个庞大的条目列表,其中一列(为简单起见,我们称之为 num 有一个数字,类似于 123456780000 (它们的长度和格式都相同),但有时有些字段看起来像这样
12345678E000
or
12345678H000
现在,我需要删除 num 列不完全是数字的所有行。 num 的类型是 TEXT,而不是 INTEGER。所以上面的例子应该删除,而123456780000不应该。
我尝试了两种解决方案,其中一种可行但不优雅且凌乱,另一种则根本不起作用。
我尝试的第一件事是
DELETE FROM MY_TABLE WHERE abs(num) == 0.0
因为根据文档,如果给出了 TEXT 值,abs(X) 将准确返回 0.0,并且无法转换为实数。所以我在想它应该让所有“仅数字”通过并删除其中包含字符的那些。但它什么也没做,它甚至不会删除一行。
接下来我尝试的是
DELETE FROM MY_TABLE WHERE num LIKE "%A%" OR "%B%" OR "%C%"
这似乎可行,但数据库很大,我不确定哪些字符会出现,虽然我可以用整个字母表做"%D%" OR "%E%" OR "%F%" OR ...,但这感觉不优雅和混乱。我其实想学习一些关于 SQLite 语言的知识。
最后,我的问题是:我如何以一种简单明了的方式解决这个问题?也许我在 abs(X) 解决方案中做错了什么,或者还有其他我不知道/想到的方法?
提前致谢。
编辑:
根据评论我试过SELECT abs(num) FROM MY_TABLE WHERE num like '%A%'
它返回了以下内容
12345678.0
这很奇怪。似乎它已经拆分了字母出现的数字。该文档声称,如果无法将其转换为数字,它将返回 0.0。嗯..
【问题讨论】:
-
你试过
select abs(num) where num like '%A%'看看返回了什么? -
@RaphaëlAlthaus 感谢您的建议,我在尝试您的建议后编辑了帖子。检查我的帖子的结尾。
标签: sql sqlite sql-delete