`like` 子句不会获取所有接近我的话的结果

Posted

技术标签:

【中文标题】`like` 子句不会获取所有接近我的话的结果【英文标题】:`like` clause does not fetch all the results that near to my word 【发布时间】:2014-10-14 01:02:24 【问题描述】:

like子句不想获取所有接近我的单词的结果,我必须写完整的句子才能得到它,例如:

我在数据库中有以下数据:

Lion king lionheart level completed good morning

我想获取Lion king,当我写这部分单词lion时,通常它必须获取Lion kinglionheart,但在我的情况下不会获取任何东西,除非必须写完整的句子来获取数据。

我尝试使用以下查询:

SELECT * FROM table WHERE name LIKE '%text'

SELECT * FROM contacts WHERE name LIKE '%text' OR name LIKE 'text%' OR name LIKE '%text%' OR name LIKE text

注意: 我正在使用C++ Qt 框架,以下是我所做的

qry.prepare("SELECT * FROM table WHERE name LIKE '%:text'");
qry.bindValue(":text", ui->searchBox_txt->text());
qry.exec();

我怎样才能进行正常行为的查询?

【问题讨论】:

【参考方案1】:
:text

是一个查询参数,名字是text

':text'

是字符串":text"

同样,"%:text" 就是这样;你的参数没有被解析,因为它在一个字符串中。

您需要使用连接运算符 (||) 将参数与 '%' 连接起来:

SELECT * FROM table WHERE name LIKE '%' || :text || '%'

【讨论】:

效果很好,但是我还是不明白你为什么用||,为什么用普通方式%text%不行。能否请您简化解释以便理解。 @LionKing 是其他编程语言中x"x"的区别;一个是变量引用,另一个是字符串字面量。 谢谢,很抱歉,但我知道variableliteral string 之间的区别,但我不知道你对这个例子variableliteral string 的含义是什么。你的解释仍然晦涩难懂。 ':text' 是字符串“:text”;其中没有查询参数。 :text 是查询参数,会被绑定的值替换。 就像我说的,它会进行字符串连接。在这种情况下,它将'%' 字符添加到字符串的开头和结尾。【参考方案2】:

删除% 之后的:。像这样的:

SELECT * FROM table WHERE name LIKE '%text%'

请注意该值区分大小写

【讨论】:

这个:是正常的,我必须用它,不是问题,因为我用的是C++ qt framework 哇……我明白了。我只是把它提到了常见的 SQL 语法 该值不区分大小写。 你在 SQL Server 中试过了吗?那里的值区分大小写。并感谢您对我的回答投反对票.. @LouisMichael 在 SQLite 中(这是问题的标记),默认情况下不区分大小写。

以上是关于`like` 子句不会获取所有接近我的话的结果的主要内容,如果未能解决你的问题,请参考以下文章

10like子句

PostgreSQL LIKE 子句

PostgreSQL LIKE 子句

MySQL

MySQL LIKE 子句

《零基础》MySQL LIKE 子句(十六)