【问题标题】:How to perform a tolerant name search in SQLite DB如何在 SQLite DB 中执行容错名称搜索
【发布时间】:2013-03-01 12:12:09
【问题描述】:

我有一个有 4 列的数据库,

|ID|CATEGORY|NAME|NATION|

并且有一个搜索方法可以简单地创建一个SELECT WHERE NAME LIKE SEARCHKEYWORD,以返回搜索到的项目, 但这不是很实用,因为关键字必须与名称相同才能找到。

如何执行更有效的搜索,容忍关键字和存储项目之间的微小差异?

【问题讨论】:

  • 使用 end-with 和 contains 搜索,查询效率降低,因为无法使用索引,查询必须扫描表中的每一行。
  • 如果在 Android 中允许,SQLite 也有一个 GLOB 操作符。 sqlite.org/lang_expr.html

标签: android sqlite search android-sqlite


【解决方案1】:

使用: SELECT * FROM DBNAME WHERE lower(NAME) LIKE '%SEARCHKEYWORD%' 并且始终将 SEARCHKEYWORD 设为小写。

【讨论】:

  • 如果名称中包含空格不起作用,例如名称 Mustang GT,关键字 mustang gt... 返回空查询
  • 我相信这是因为大小写不匹配。我编辑了答案。请尝试修改后的解决方案并告诉我
【解决方案2】:

使用此查询来选择您输入的内容

SELECT * FROM DBNAME WHERE NAME LIKE '%SEARCHKEYWORD%'

或使用首字母

SELECT * FROM DBNAME WHERE NAME LIKE 'SEARCHKEYWORD%'

从上次开始

SELECT * FROM DBNAME WHERE NAME LIKE '%SEARCHKEYWORD'

【讨论】:

  • 在您的代码中错过了 ' ,因此我得到了错误,但是如果名称包含空格不起作用,例如名称 Mustang GT,关键字 mustang gt... 返回空查询跨度>
猜你喜欢
  • 2015-03-17
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-20
  • 2016-10-05
  • 1970-01-01
  • 2021-09-24
相关资源
最近更新 更多