如何使用比较运算符过滤 SQLite 中的数据 [重复]

Posted

技术标签:

【中文标题】如何使用比较运算符过滤 SQLite 中的数据 [重复]【英文标题】:How to use comparison operator to filter data in SQLite [duplicate] 【发布时间】:2016-08-08 03:41:31 【问题描述】:

我有一个数据库字典有大约 50,000 条记录。我创建了索引并使用它们来过滤数据。但是当我尝试使用 Like 运算符时,索引不起作用,并且当我尝试输入键在 searchview 中进行过滤时,如果没有在数据库中找到数据(数据被加载到 listview 并且我也使用 asynctask),它会使我的应用程序变慢。我认为原因是索引不适用于Like 运算符。所以我尝试通过比较运算符更改我的选择查询。但这不符合我的想法。我希望它像这样工作,但事实并非如此。所以有人知道我在选择查询中有什么问题以及我该如何解决?

这是我使用比较运算符的选择查询

String selectQuery = "SELECT * FROM '"+TABLE_ENG_VIE+"' WHERE word >= '"+keyFilter+"'  LIMIT 20 OFFSET '"+offset+"'";

这是我使用 LIKE 运算符的选择查询

String selectQuery = "SELECT * FROM '"+TABLE_ENG_VIE+"' WHERE word LIKE '"+keyFilter+"%' LIMIT 20 OFFSET '"+offset+"'";

感谢您阅读我的问题,如果我因为我的英语不好而无法解释清楚,非常抱歉。再次感谢您,祝您好运。

【问题讨论】:

尝试“glob”而不是“like” @pskink 谢谢你,兄弟。你拯救了我的一天:) 【参考方案1】:

将您的查询更改为下面,据我说您在编写LIKE 条件时弄错了

String qry = "SELECT * FROM '" + TABLE_ENG_VIE + "' WHERE word LIKE '%" + keyFilter + "%';"; 

【讨论】:

我认为您的查询过滤了关键字等于 keyFilter 的任何数据。但我只想过滤以“keyFilter”开头的字符的数据。所以我使用'keyFilter%'。如果您使用 Like 运算符,索引将不起作用。它使数据库失去了几秒钟的过滤时间。 对不起,我忘了添加那个变量,请检查更新的答案@XiaoKing 您的查询类似于: SELECT * FROM anh_viet WHERE word like '%lov%' 。上面选择查询的结果都是带有“lov”字符的单词,例如:loved、clove、glove 等等……但我希望我的结果必须是:love、loveable 之类的。 tthan 使用 SELECT * FROM anh_viet WHERE word like 'lov%'; 但我只想过滤以 keyFilter 开头的单词 :(。如果我使用您的查询进行过滤。在数据库中过滤也会损失几秒钟,因为 Like 操作不使用索引 :(。

以上是关于如何使用比较运算符过滤 SQLite 中的数据 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

比较用于过滤数据表c#的文本框

mysql过滤数据-------------------------待补充

在Hbase使用过滤器(行键过滤器列族与列过滤器值过滤器)

将 Gps 作为后台服务运行并将接收到的当前位置数据与 Sqlite 中的值进行比较?

如何通过文本框过滤数据表视图中的子表单? #likeoperator #where 子句

如何比较 sqlite TIMESTAMP 值