Sqlite-从tbl中选择*名称,如“a%”;不工作?

Sqlite-从tbl中选择*名称,如“a%”;不工作?,sqlite,select,sql-like,Sqlite,Select,Sql Like,我有一张名为tbl的表格: 我写下这个问题: SELECT * FROM tbl WHERE name LIKE '%a%'; SELECT * FROM tbl WHERE name LIKE 'a%'; 它成功了,它又回来了: 阿里,阿米尔,米兰,阿利雷扎 但是当我写这个查询时: SELECT * FROM tbl WHERE name LIKE '%a%'; SELECT * FROM tbl WHERE name LIKE 'a%'; 它什么也没回 像“某物%”对我不起作用,但像

我有一张名为tbl的表格:

我写下这个问题:

SELECT * FROM tbl WHERE name LIKE '%a%';
SELECT * FROM tbl WHERE name LIKE 'a%';
它成功了,它又回来了:

阿里,阿米尔,米兰,阿利雷扎

但是当我写这个查询时:

SELECT * FROM tbl WHERE name LIKE '%a%';
SELECT * FROM tbl WHERE name LIKE 'a%';
它什么也没回

像“某物%”对我不起作用,但像“%某物”和“%某物%”对我起作用。

。。。其中,像“%a%”这样的名称将在名称列中的任意位置找到a或a

。。。其中,像“a%”这样的名称仅限于查找a或a作为名称列的第一个字符,因此,第一个字符前面似乎有一个字符,可能是空白字符

理想/正确的解决方案是查看如何插入行,并查看是否只插入值本身

解决方案可以是使用WHERE LTRIMname,如“A%”;这将在进行比较之前从开始处删除空白

以下是使用两组数据进行演示的示例

第一组数据与您期望的数据存储方式相同。 第二组是前面有空格字符的数据。 :-

然后运行的3个查询:-

SELECT * FROM tbl WHERE name LIKE '%a%';
SELECT * FROM tbl WHERE name LIKE 'a%';
SELECT * FROM tbl WHERE LTRIM(name) LIKE 'a%';
使用“%a%”的第一个查询将返回名称列中任意位置均为a的所有行。5行中的4行在每个集合的名称列中包含a,因此,对于2个集合,总共8行;根据:-

第二个查询是最有选择性的,因为a是第一个字符,所以只返回第一组数据中的3行,而第二组数据中的类似行不会返回,因为a前面有一个空格,这可能是一种情况;根据:-

第三个查询是第二个查询的改编,它修剪前导的空格,从每个集合返回3行;根据:-


看起来SQLite认为字母不是文本中的第一个字符。您是否100%确定开头没有空格?