当前位置: 首页 > 面试题库 >

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

司马庆
2023-03-14
问题内容

好的,所以我有一个庞大的条目列表,并且在其中一列中(为简单起见,我们将其称为 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。唔..


问题答案:

您可以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]*'


 类似资料:
  • 问题内容: 什么是最好的纯Python实现,以检查字符串是否包含字母表中的任何字母? 哪里会因为没有字母而返回,而会因为有了字母而返回。 问题答案: 正则表达式应该是一种快速的方法:

  • 所以我一辈子也想不出来。我正在尝试编写一个程序,提示用户输入电话号码。这将作为字符串输入,并在稍后的程序中转换为整数数组。然而,我现在遇到的情况是验证用户输入的字符串是否仅限于!!!包含2-9之间的数字。我已经尝试了。Contains方法和。Match方法,但是使用这些方法总是提供错误的结果。如果有人能提供一些关于如何解决这个问题,我将非常感谢。提前感谢。 以下是我目前掌握的信息:

  • 我正在寻找一个运算符,它允许我检查字段的值是否包含某个字符串。 比如: 可能吗?

  • 我想创建一种算法,把字符串中的字母变成int,假设字符串是ABCD,输出是1234,这将确保相同的消息每次都是相同的,我的想法是创建一个字典,以char作为键,int作为值,然后它会循环通过字符串,在这个循环中,它会循环通过字典中的所有内容,类似这样 然后我的想法是检查种子中的内容(索引为i)是否等于字典中的关键字(索引为j),然后将该位置的值赋给输出,我试着在网上搜索如何做到这一点,但我没有找到

  • 问题内容: 这个想法是读取String并确认它不包含任何数字字符。因此,“ smith23”之类的内容将不被接受。 问题答案: 你想要什么?速度还是简单?为了提高速度,请选择基于循环的方法。为简单起见,请使用一种基于内衬RegEx的方法。 速度 简单

  • 如果是-than字符串应该被移除。 我想知道为什么不是每个带有“L”的字符串都被去掉? 结果是: