我需要编写一个单独的SQL语句来列出所有包含精确单词'right'(包括大写和小写)作为名为Track的名称的一部分的单词。换句话说,它不会在输出中包含带有“权利”或“正义”字样的曲目名称。找到确切的单词作为字符串的一部分
我写了这个,但我不断地在字母前面或后面加上字母,例如:明亮或权利。
SELECT name
FROM Track
WHERE name LIKE "%right%";
我需要编写一个单独的SQL语句来列出所有包含精确单词'right'(包括大写和小写)作为名为Track的名称的一部分的单词。换句话说,它不会在输出中包含带有“权利”或“正义”字样的曲目名称。找到确切的单词作为字符串的一部分
我写了这个,但我不断地在字母前面或后面加上字母,例如:明亮或权利。
SELECT name
FROM Track
WHERE name LIKE "%right%";
LIKE用于模式匹配。 %
的意思是“零个或多个任意字符”,如其他系统中的*
通配符。 name LIKE "%right%"
表示“名称”是“正确的”,前后都是“。这就是为什么你得到“更明亮”和“权利”。
用正则表达式可以写出类似于/\bright\b/
的地方,其中\b
表示“单词分隔符”。但SQLite需要一个插件来使用正则表达式,LIKE
没有相应的东西。所有你必须使用的是%
(零个或多个字符)或_
(任何一个字符)。最好你可以做的是匹配空格,如LIKE "% right %"
,但只有在“右”周围有空格时才有效。 “现在”不匹配。
如果你想从“右”,“右转”和“左转左转”等数值中选择“right”这个词,你需要覆盖四种可能性。
这意味着四个表达式。
name LIKE "right %" or
name LIKE "% right" or
name LIKE "% right %" or
lower(name) = "right"
LIKE
在SQLite中默认是不区分大小写的。 =
不是,因此需要lower(name)
将值归一化为小写。
我不认为他在寻求平等。如果名称字段包含“RIGHT MAN”,那么他希望该名称在输出中。但根据你的答案,不会给出正确的输出? –
谢谢= =似乎只给我什么,因为没有轨道标题只有正确的。我在发布之前尝试过并获得了它。我需要用其他词汇来表达它,但是在没有任何字母之前或之后的标准......这是否有意义Schwern? –
@DeendayalGarg这确实更有意义!我已经更新了我的答案。 – Schwern
你需要做一个MATCH。首先你建立一个FTS表,然后做一个MATCH。要使用FTS表,您需要在SQLITE库中定义SQLITE_ENABLE_FTS3。 MATCH在全文中起作用,并且不区分大小写。 – BobRun