【问题标题】:Can I do a "reverse" LIKE operation in SQLite?我可以在 SQLite 中执行“反向”LIKE 操作吗?
【发布时间】:2018-02-07 07:24:49
【问题描述】:

所以我想使用单词“ROOTED”或“UNROOT”从我的数据库中搜索单词“ROOT”。

我希望我不会被误解为想要执行这种正常的类似操作

SELECT Word FROM tblWordList WHERE Keywords LIKE '%ROOT%'

我想做相反的事情,所以如果我在数据库中有“OOT”或“ROO”,当我输入“ROOTED”时,它也会被搜索”。

我实际上在关键字列中有ROO和OOT这两个词。但也有SAM、MOON、RIP等其他词。现在我想在 Word 列中搜索值,或者只说出现 ROOTED 的子字符串的行的 ID。在这种情况下,我应该返回 ROO 和 OOT 行的 id。

android+sqlite 的代码会很棒,但即使是操作命令也会有很大的帮助。

【问题讨论】:

  • 不是“对立面”,能说清楚一点吗?
  • 该列是否包含 ROO / OOT
  • 您应该研究 SQL 运算符 LIKE 的工作原理。
  • 列中有不同的单词。但我想搜索所有可用的子字符串。例子。我的数据库中有 ROO、TED、ROOT、SAM 和 NIM。然后我使用ROOTED这个词进行了查询。然后我希望这个查询给我具有 ROO、TED 和 ROOT 的行,因为它们都是 ROOTED 的子字符串。
  • 提供minimal reproducible example,并包含不应匹配的示例。

标签: sqlite select android-sqlite


【解决方案1】:

当您想要匹配值 OOTROOTED 时,具有这些特定值的 LIKE 将如下所示:

'ROOTED' LIKE '%OOT%'

所以如果第一个是常数值,而第二个来自数据库,就这样写吧:

SELECT ... WHERE 'ROOTED' LIKE '%' || Keywords || '%';

【讨论】:

  • 您能否详细说明您的答案:我尝试使用此命令:SELECT ID from tblInformation WHERE 'tommen' LIKE '%' ||关键词 || '%';即使我在关键字中有 3 行存在子字符串“tommen”(tommening、tommens、stommeny),它也返回 0 个结果。而我实际上想要实现的甚至是包含'tommen'子字符串的行,例如当我执行查询时会出现'tom'或'men'或'mme'的行。
  • 这不是你在问题中问的。请注意,空字符串也是子字符串,因此您的描述将匹配所有行。
  • 对不起,如果我不清楚。我真的觉得很难用英语解释。我意识到你所说的空字符串是真的。但是,有没有办法执行此操作并仅过滤匹配仅为空字符串的结果?
【解决方案2】:
SELECT Word FROM tblWordList WHERE Keywords LIKE '%ROO%' OR Keywords LIKE '%OOT%'

您需要提出自己的算法来确定要使用的搜索词 (ROOTED) 的哪些特定子集。

【讨论】:

  • 我实际上在关键字列中有ROO和OOT这两个词。但也有其他词,如 SAM、MOON、RIP。现在我想在 Word 列中搜索值,或者只说出现 ROOTED 的子字符串的行的 ID。在这种情况下,我应该返回 ROO 和 OOT 行的 id。
  • @McDuran:正如我所写,您需要提出自己的算法来确定要使用的搜索词 (ROOTED) 的哪些特定子集。您正在寻找的内容没有 SQL 运算符。
猜你喜欢
  • 2018-07-24
  • 1970-01-01
  • 2010-10-29
  • 1970-01-01
  • 2021-11-23
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多