use*_*734 6 sql sqlite sql-delete
好的,所以我有一个巨大的条目列表,并在其中一个列中(为简单起见,我们称之为num,这是一个数字,类似于123456780000(它们的长度和格式都相同),但有时会有类似的字段这个
12345678E000
or
12345678H000
Run Code Online (Sandbox Code Playgroud)
现在,我需要删除num列不完全是数字的所有行.num的类型是TEXT,而不是INTEGER.所以上面的例子应该删除,而不123456780000应该删除.
我尝试了两种解决方案,其中一种可以工作,但是不够优雅和杂乱,另一种根本不起作用.
我尝试的第一件事是
DELETE FROM MY_TABLE WHERE abs(num) == 0.0
Run Code Online (Sandbox Code Playgroud)
因为根据文档,如果给出TEXT值,abs(X)将返回0.0,并且不可转换为实数.所以我认为应该让所有"仅限数字"通过并删除带有字符的那些.但它没有做任何事情,它甚至不删除任一行.
我接下来要做的就是
DELETE FROM MY_TABLE WHERE num LIKE "%A%" OR "%B%" OR "%C%"
Run Code Online (Sandbox Code Playgroud)
这似乎工作,但数据库很大,我不知道哪些字符可以出现,虽然我可以只"%D%" OR "%E%" OR "%F%" OR ...用整个字母表,这感觉不雅和杂乱.我实际上想了解一下SQLite语言.
最后,我的问题是:如何以一种简单的方式解决这个问题?也许我的abs(X)解决方案有问题,或者有其他我不知道/想到的方法?
提前致谢.
编辑:根据我试过的评论SELECT abs(num) FROM MY_TABLE WHERE num like '%A%'
,它返回以下内容
12345678.0
Run Code Online (Sandbox Code Playgroud)
真奇怪.它似乎已经将字母出现的数字分开了.该文件声称如果它无法将其转换为数字,它将返回0.0.嗯..
您可以GLOB在SQLite中使用范围将它们选出来的方法:
SELECT *
FROM MY_TABLE
WHERE num GLOB '*[A-Za-z]*'
Run Code Online (Sandbox Code Playgroud)
将此提琴与它一起使用:http ://sqlfiddle.com/#!7/ 4bc21/10
例如,对于这些记录:
SELECT *
FROM MY_TABLE
WHERE num GLOB '*[A-Za-z]*'
Run Code Online (Sandbox Code Playgroud)
GLOB '*[A-Za-z]*' 将返回以下三个:
num
----------
1234567890
0987654321
1000000000
1000A00000
1000B00000
1000c00000
Run Code Online (Sandbox Code Playgroud)
然后,您可以将其翻译为适当的内容DELETE:
DELETE
FROM MY_TABLE
WHERE num GLOB '*[A-Za-z]*'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |