首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sql/mysql在一个字段中搜索两个关键字

sql/mysql在一个字段中搜索两个关键字
EN

Stack Overflow用户
提问于 2012-02-03 17:08:34
回答 3查看 943关注 0票数 3

这就是我所拥有的:

代码语言:javascript
运行
复制
SELECT `id`, `names` FROM `screenplays` WHERE `names` LIKE '%joe%mike%'

字段名称包含:

代码语言:javascript
运行
复制
row1: joe
row2: mike
row3: joe,mike

我如何返回所有3行作为结果?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-03 17:11:22

使用

代码语言:javascript
运行
复制
SELECT `id`, `names` 
FROM `screenplays` 
WHERE `names` LIKE '%joe%' 
    OR `names` LIKE '%mike%'

如果名称用逗号分隔,并且在指定joe时不需要像joey这样的名称,则可以展开查询,如下所示:

代码语言:javascript
运行
复制
SELECT `id`, `names` 
FROM `screenplays` 
WHERE `names` LIKE 'joe'
    OR `names` LIKE '%,joe'
    OR `names` LIKE 'joe,%'
    OR `names` LIKE '%,joe,%'

类似地,对于每个关键字

票数 3
EN

Stack Overflow用户

发布于 2012-02-03 17:22:23

答案都很好,但我更喜欢使用MySQL对正则表达式的出色支持:

代码语言:javascript
运行
复制
SELECT `id`, `names` FROM `screenplays` WHERE `names` REGEX 'joe|mike'

要考虑逗号分隔的名称以及空格,请使用更高级的正则表达式:

代码语言:javascript
运行
复制
SELECT `id`, `names` FROM `screenplays` WHERE `names` REGEX '(^|,) *(joe|mike) *($|,)'

它可以分解为:

(^|,)#在行首或逗号后开始*#忽略任何空格(joe|mike) #要匹配的名称*#忽略任何空格($|,)#在行尾或逗号结束

请参阅MySQL manual page for REGEX

票数 3
EN

Stack Overflow用户

发布于 2012-02-03 17:12:36

代码语言:javascript
运行
复制
SELECT `id`, `names` FROM `screenplays` 
WHERE concat(',', `names`, ',') LIKE '%,mike,%' or concat(',', `names`, ',') LIKE '%,joe,%'

names添加逗号可防止在搜索carl时返回carlton

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9126129

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档