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

时间:2016-09-26 04:10:59

标签: sqlite

我需要编写一个SQL语句来列出所有具有正确单词“right”(包括大写和小写)的轨道,作为名为Track的表中名称的一部分。换句话说,它不会在输出

中包含带有'rights'或'righteous'等字样的曲目名称

我写了这篇文章,但是我继续在正确之前或之后收到字母,例如:更明亮或权利。

SELECT name

FROM Track

WHERE name LIKE "%right%";

1 个答案:

答案 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)来将值规范化为小写。