小编典典

SQLite,检查TEXT字段中是否包含任何字母字符

sql

好的,所以我有一个庞大的条目列表,并且在其中一列中(为简单起见,我们将其称为 num,
其中有一个数字,例如123456780000(它们的长度和格式都相同),但是有时有些字段看起来像这

12345678E000 
or 
12345678H000

现在,我需要删除 num 列不完全为数字的所有行。 num 的类型是 TEXT ,而不是 INTEGER
。因此,上述示例应删除,而123456780000不应删除。

我尝试了两种解决方案,其中一种有效,但笨拙且混乱,而另一种则根本不起作用。

我尝试的第一件事是

DELETE FROM MY_TABLE WHERE abs(num) == 0.0

因为根据文档,如果给定 TEXT 值且 abs(X) 不能转换为实数,则 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。唔..


阅读 284

收藏
2021-04-22

共1个答案

小编典典

您可以GLOB在SQLite中使用范围将它们选出来的方法:

SELECT * 
FROM MY_TABLE
WHERE num GLOB '*[A-Za-z]*'

将此提琴与它一起使用:http ://sqlfiddle.com/#!7/
4bc21/10

例如,对于这些记录:

   num
----------
1234567890
0987654321
1000000000
1000A00000
1000B00000
1000c00000

GLOB '*[A-Za-z]*' 将返回以下三个:

   num
----------
1000A00000
1000B00000
1000c00000

然后,您可以将其翻译为适当的内容DELETE

DELETE 
FROM MY_TABLE
WHERE num GLOB '*[A-Za-z]*'
2021-04-22