如何查询包含多个字母的字符串?

时间:2013-06-23 20:16:47

标签: mysql string

如何在MySQL中运行查询以搜索包含多个字符的字符串?

SELECT * FROM animals WHERE name LIKE '%r%'只会返回包含'r'的动物..

+---------+------------+
|    id   | name       |
+---------+------------+
|     1   | zebra      |
|     14  | raccoon    |
|     25  | parrot     | 
|     49  | rhinoceros |
+---------+------------+

SELECT * FROM animals WHERE name LIKE '%rr%'只会返回包含'rr'的动物。

+---------+------------+
|    id   | name       |
+---------+------------+
|     25  | parrot     | 
+---------+------------+

我想找到任何包含'r'的动物名称..让我们在名字的任何地方说两次。

+---------+------------+
|    id   | name       |
+---------+------------+
|     25  | parrot     | 
|     49  | rhinoceros |
+---------+------------+

任何?

2 个答案:

答案 0 :(得分:10)

你试过这个吗?

select *
from animals
where name like '%r%r%'

另一种解决方案是使用长度并替换:

select *
from animals
where length(name) - length(replace(name, 'r', '')) >= 2;

如果您正在寻找一组字母的出现,例如'r''s',这可能是有利的:

select *
from animals
where length(name) - length(replace(replace(name, 'r', ''), 's', '')) >= 2;

编辑:

如果你想要完全两个“r”,你可以在where子句中使用相等:

select *
from animals
where length(name) - length(replace(name, 'r', '')) = 2;

答案 1 :(得分:2)

您可以通过检查删除这些字符时字符串长度的变化来间接地进行此操作:

SELECT id, name
FROM yourtable
WHERE (length(name) - length(replace(name, 'r', ''))) >= 2

e.g。 parrot有6个字符,删除r后只有4个,所以6-4 = 2并且匹配到哪里。