5

如何在 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 |
+---------+------------+

任何人?

4

2 回答 2

15

你试过这个吗?

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;
于 2013-06-23T20:18:27.690 回答
2

您可以通过检查删除这些字符时字符串的长度变化量来间接地解决它:

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

例如 parrot 有 6 个字符,r删除后只有 4 个,所以 6-4=2 并且会匹配 where。

于 2013-06-23T20:19:55.353 回答