加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 23:42:52 所属栏目:百科 来源:网络整理
导读:好吧,所以我有一个巨大的条目列表,并在其中一个列中(为简单起见,我们称之为num,这是一个数字,类似于123456780000(它们的长度和格式都相同),但有时会有一些字段看起来像像这样 12345678E000 or 12345678H000 现在,我需要删除num列不完全是数字的所有行. num的
好吧,所以我有一个巨大的条目列表,并在其中一个列中(为简单起见,我们称之为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%”或“%E%”或“%F%”或…与整个字母表,这感觉不雅和凌乱.我实际上想了解一下SQLite语言.

最后,我的问题是:如何以一种简单的方式解决这个问题?也许我的abs(X)解决方案有问题,或者有其他我不知道/想到的方法?

提前致谢.

编辑:
根据评论我试过SELECT abs(num)FROM MY_TABLE WHERE num”%A%’
它返回了以下内容

12345678.0

真奇怪.它似乎已经将字母出现的数字分开了.该文件声称如果它无法将其转换为数字,它将返回0.0.嗯..

你可以在SQLite中使用 GLOB和一个范围来单独输出:
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]*'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读