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' を含む動物の名前を探したいのですが、名前のどこかで 2 回言いましょう。

+---------+------------+
|    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;

編集:

ちょうど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 に答える