我需要编写一个SQL语句来列出所有具有正确单词“right”(包括大写和小写)的轨道,作为名为Track的表中名称的一部分。换句话说,它不会在输出
中包含带有'rights'或'righteous'等字样的曲目名称我写了这篇文章,但是我继续在正确之前或之后收到字母,例如:更明亮或权利。
SELECT name
FROM Track
WHERE name LIKE "%right%";
答案 0 :(得分:3)
LIKE用于模式匹配。 %
表示“零或多个字符”,如其他系统中的*
通配符。 name LIKE "%right%"
说“名字是'正确'这个词,包括它之前和之后的任何内容”。这就是为什么你会变得“更加光明”和“权利”。
使用正则表达式,您可以编写类似/\bright\b/
的内容,其中\b
表示“分词”。但SQLite需要一个插件才能使用正则表达式而LIKE
没有等价物。您需要处理的只是%
(零个或多个字符)或_
(任何一个字符)。你可以做的最好的是匹配空格,例如LIKE "% right %"
,但只有在“右”周围有空格时才有效。 “现在”将不匹配。
如果你想从“左右”,“右转”和“左右”等值中选择“正确”这个词,你需要涵盖四种可能性。
这意味着四个表达。
name LIKE "right %" or
name LIKE "% right" or
name LIKE "% right %" or
lower(name) = "right"
SQLite中的 LIKE
默认情况下不区分大小写。 =
不是,因此需要lower(name)
来将值规范化为小写。