如果短语包含MySQL中的确切单词,您将如何设法搜索?
f.e。如果列phrase
有短语:
'您好,我的名字是Jack'
我想搜索它是否包含单词:' name'和杰克' - 很简单:
SELECT `phrase` FROM column WHERE `phrase` RLIKE '[[:<:]]name[[:>:]]'
AND `phrase` RLIKE '[[:<:]]Jack[[:>:]]'
但如果短语如下,你将如何设法做到这一点: &#39; HelloMyNameIsJack&#39; ?? (没有空格)
编辑:我不能使用&#39; LIKE&#39;因为如果会有另一个短语:&#39; HelloMyXyznamexyzIsJack&#39; - 它会找到我整个短语 - 我不想要 - 我只是想找到单词编辑2:很难解释,但让我尝试一下:我想找一个包含给定单词的短语但是作为一个单词 - 如果我发出单词&#39; name&#39;和杰克&#39; - 我不想找到f.e. &#39; HelloMyNamesIsJacky&#39; - 问题是如何让sql知道&#39; HelloMyNamesIsJacky&#39;是单词(因为它们之间没有空格)
有什么想法吗?
答案 0 :(得分:1)
根据您的修改,听起来这可以使用concat
与like
一起使用:
select phrase
from yourtable
where concat(' ',phrase,' ') like '% name %' and
concat(' ',phrase,' ') like '% Jack %'
注意 - 如果您的句子在一段时间内结束,这仍然可能会失败。你必须为这种情况编码......
答案 1 :(得分:1)
要查找类似示例的单词,您可以尝试使用空格前置大写字母,然后运行现有的正则表达式。这与从您的数据中解析英语单词不同,然而,这将充满技术挑战。不过,它可能会对你起到快速的作用。
根据你的例子,我在这里写了几封信给你一个想法(但你想添加A,B,C ......):
select Phrase
from MyTable
where replace(replace(replace(Phrase, 'I', ' I'), 'J', ' J'), 'N', ' N') rlike '[[:<:]]name[[:>:]]'
and replace(replace(replace(Phrase, 'I', ' I'), 'J', ' J'), 'N', ' N') rlike '[[:<:]]Jack[[:>:]]'
给出如下数据:
'Hello my name is Jack'
'HelloMyNameIsJack'
'HelloMyXyznamexyzIsJack'
'HelloMyNamesIsJacky'
'HelloMyNameIsJacky'
'HelloJackIsMyName'
您的结果将是:
'Hello my name is Jack'
'HelloMyNameIsJack'
'HelloJackIsMyName'
答案 2 :(得分:0)
如果您仍然使用LIKE
运算符
SELECT `phrase`
FROM `column`
WHERE `phrase` LIKE '%name%'
AND `phrase` LIKE '%Jack'
在这种情况下,您似乎应该选择Full-Text Search