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