6

我正在尝试检索以 SQlite 中任何非字母字符开头但似乎无法正常工作的所有列。我目前有这个代码,但它返回每一行:

SELECT * FROM TestTable WHERE TestNames NOT LIKE '[A-z]%'

有没有办法检索 TestNames 的第一个字符不属于字母表的所有行?

4

3 回答 3

8

你只去第一个角色吗?

select * from TestTable WHERE substr(TestNames,1) NOT LIKE '%[^a-zA-Z]%'

substr 函数(在某些 SQL 语言中也可以称为 left())将帮助您隔离字符串中的第一个字符。

编辑:也许是 sqllite 中的 substr(TestNames,1,1),我没有现成的实例来测试那里的语法。

添加:

select * from TestTable WHERE Upper(substr(TestNames,1,1)) NOT in ('A','B','C','D','E',....)

似乎不是最佳的,但在功能上会起作用。不确定有哪些 char 命令可以在 SQLlite 中执行一系列字母。

我使用'upper'来制作它,所以你不需要在not in语句中使用小写字母......有点希望SQLlite知道那是什么。

于 2012-06-25T20:10:15.850 回答
0

尝试

SELECT * FROM TestTable WHERE TestNames NOT LIKE '[^a-zA-Z]%'
于 2012-06-25T20:07:37.567 回答
0

SELECT * FROM NC_CRIT_ATTACH WHERE substring(FILENAME,1,1) NOT LIKE '[Az]%'; 应该快一点,因为它是 A)首先只从第一列获取所有数据,然后扫描它。B)除非您索引此列,否则仍然是全表扫描。

于 2012-06-25T20:37:03.647 回答