2012-07-24 23 views
2

我有一個字符串表,並希望檢索包含至少兩個預定義列表字符的所有行。更好的例子來說明:在MySQL中,如何獲取在預定義列表中包含至少兩個字符的所有字符串

我的表看起來像這樣:

Id|Word 
1|Cat 
2|Chicken 
3|Dog 
4|Elephant 
5|Fish 
6|Goat 

這可能是我的字符列表:

Characterlist = 'A', 'B', 'C', 'E' 

select語句應該然後返回: 貓,雞,大象

我已經查看了mySQL文檔中的字符串函數,但找不到適合此功能的函數。它甚至有可能嗎?

回答

5

下面是其依賴於相加由布爾條件返回的0或1的低效方式:

SELECT 
    *, 
    (
    (UPPER(Word) LIKE '%A%') + 
    (UPPER(Word) LIKE '%B%') + 
    (UPPER(Word) LIKE '%C%') + 
    (UPPER(Word) LIKE '%D%') 
) AS lettermatches 
FROM yourtable 
HAVING lettermatches >= 2 

每個的LIKE條件返回一個0或1的那些相加在一起,並且HAVING條款限制了導致行數爲2或更大。

這可能是更快地使用LOCATE()而不是LIKE

SELECT 
    *, 
    (
    (LOCATE('A', UPPER(Word)) > 0) + 
    (LOCATE('B', UPPER(Word)) > 0) + 
    (LOCATE('C', UPPER(Word)) > 0) + 
    (LOCATE('D', UPPER(Word)) > 0) 
) AS lettermatches 
FROM yourtable 
HAVING lettermatches >= 2 
+0

完美!只是我在找什麼 – Muleskinner 2012-07-24 11:38:06

+0

謝謝,如果同一封信可以計算多次 – Muleskinner 2012-07-24 11:50:46

相關問題