`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 king
和lionheart
,但在我的情况下不会获取任何东西,除非必须写完整的句子来获取数据。
我尝试使用以下查询:
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"
的区别;一个是变量引用,另一个是字符串字面量。
谢谢,很抱歉,但我知道variable
和literal string
之间的区别,但我不知道你对这个例子variable
和literal string
的含义是什么。你的解释仍然晦涩难懂。
':text'
是字符串“:text”;其中没有查询参数。 :text
是查询参数,会被绑定的值替换。
就像我说的,它会进行字符串连接。在这种情况下,它将'%'
字符添加到字符串的开头和结尾。【参考方案2】:
删除%
之后的:
。像这样的:
SELECT * FROM table WHERE name LIKE '%text%'
请注意该值区分大小写
【讨论】:
这个:
是正常的,我必须用它,不是问题,因为我用的是C++ qt framework
。
哇……我明白了。我只是把它提到了常见的 SQL 语法
该值不区分大小写。
你在 SQL Server 中试过了吗?那里的值区分大小写。并感谢您对我的回答投反对票..
@LouisMichael 在 SQLite 中(这是问题的标记),默认情况下不区分大小写。以上是关于`like` 子句不会获取所有接近我的话的结果的主要内容,如果未能解决你的问题,请参考以下文章