Sqlite 查找作为字符串一部分的确切单词

Sqlite 查找作为字符串一部分的确切单词,sqlite,Sqlite,我需要编写一条SQL语句,在名为Track的表中列出所有具有确切单词“right”(包括大写和小写)的曲目,作为名称的一部分。换句话说,它不会在输出中包含带有“rights”或“justice”等字样的曲目名称 我写了这封信,但我不断收到在右前或右后带有字母的单词,例如:brighter或rights SELECT name FROM Track WHERE name LIKE "%right%"; 用于模式匹配%表示“任何内容的零个或多个字符”,如其他系统中的*通配符名称如“%right

我需要编写一条SQL语句,在名为Track的表中列出所有具有确切单词“right”(包括大写和小写)的曲目,作为名称的一部分。换句话说,它不会在输出中包含带有“rights”或“justice”等字样的曲目名称

我写了这封信,但我不断收到在右前或右后带有字母的单词,例如:brighter或rights

SELECT name

FROM Track

WHERE name LIKE "%right%";
用于模式匹配
%
表示“任何内容的零个或多个字符”,如其他系统中的
*
通配符<代码>名称如“%right%”表示“名称是‘right’一词,前后都有”。这就是为什么你越来越“聪明”和“权利”

使用正则表达式,您可以编写类似于
/\bright\b/
的内容,其中
\b
表示“分词”。但是SQLite需要一个插件来使用正则表达式,而
LIKE
则没有相应的插件。您只需使用
%
(零个或多个字符)或
(任意一个字符)。您所能做的最好的事情是匹配空格,如“%right%”之类的
,但这只适用于“right”周围有空格的情况。“现在”不匹配

如果您想从“right-left”、“turn-right”和“left-right-left”等值中选择“right”一词,则需要涵盖四种可能性

  • 就在开头
  • 就在最后
  • 它在中间。
  • 只有我一个人
这意味着四个表达

name LIKE "right %"   or
name LIKE "% right"   or
name LIKE "% right %" or
lower(name) = "right"

SQLite中的
LIKE
默认情况下不区分大小写
=
不是,因此必须使用
lower(name)
将值规范化为小写。

我认为他不是在寻求相等。若名称字段包含“RightMan”,那个么他希望该名称出现在输出中。但是根据你的回答,这不会给出正确的输出吗?谢谢,=似乎什么也没给我,因为没有正好在里面的曲目标题。我在发帖前试过了,得到了。我需要用其他的词来表达,但也有在…之前或之后没有字母的标准。。。。。这有道理吗?Schwern?@DeendayalGarg这更有道理!我已经更新了我的答案。你需要做一个匹配。首先构建FTS表,然后进行匹配。要使用FTS表,您需要在SQLITE库中定义SQLITE_ENABLE_FTS3。MATCH适用于整个单词,不区分大小写。