2013-06-23 61 views
3

如何運行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 | 
+---------+------------+ 

有人嗎?

回答

9

你試過嗎?

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」 S,你可以只用平等where子句中:多少字符串的長度發生變化時您刪除這些字符

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

類似的解決方案是不太一樣的問REPLACE()解決方案的問題,因爲它與2 *或以上*「R」字符相匹配的名字。你必須添加',而不是像「%R%R%R%」'或切換到使用正則表達式查找* *確切2. – Bohemian

+0

@Bohemian。 。 。這個問題不明確。它說「包含一個'r'..可以在名稱的任何地方說兩遍」。從上下文來看,你的解釋會更合理。但是,所述上下文是「鸚鵡的匹配與1「R」的情況。 –

+0

以爲你可能想將它添加作爲替代,萬一將來人們想要的是2.這是一個有趣的解決方案,我以前從未見過的。它依然屹立,這兩個版本將不會產生相同的結果,除非碰巧有超過2轉的沒有名字 - 至少應該被提及。 – Bohemian

2

你可以去了解它間接地,通過檢查:

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

如鸚鵡具有6個字節,並且與r去除,僅4,所以6-4 = 2,將匹配的位置。

相關問題