2017-03-17 48 views
1

一直在爲此付出努力。 有沒有辦法找到我的表中的所有行'單詞'列中的單詞是搜索詞的一部分?MySql正則表達式結果字已知字的一部分

+---------+-----------------+ 
| id_word | word   | 
+---------+-----------------+ 
| 177041 | utvälj   | 
| 119270 | fonders   | 
| 39968 | flamländarens | 
| 63567 | hänvisningarnas | 
| 61244 | hovdansers  | 
+---------+-----------------+ 

我想提取行119270,fonders。我想通過傳遞「plafonders」來做到這一點。

SELECT * FROM words WHERE word REGEXP 'plafonders$' 

那當然查詢將在這種情況下無法正常工作,會一直完美的,如果它已經反過來。

有誰知道解決這個?

+0

請問查詢不返回任何結果?還是會崩潰? –

回答

1
SELECT * FROM words WHERE 'plafonders' REGEXP concat(word, '$') 

應該完成你想要的。您正則表達式:

plafonders$ 

在列的末尾正在尋找plafonders。這是尋找列的所有內容,直到它結束爲止,例如對於119270,正則表達式爲fonders$

參見https://regex101.com/r/Ytb3kg/1/https://regex101.com/r/Ytb3kg/2/相比較。

+0

作品像魅力!:) –

+0

像一個魅力 - 直到桌子變大。該查詢總是掃描整個表。 –

+0

@RickJames OP想要將輸入與鬆散的單詞匹配進行比較,如何在沒有全表掃描的情況下完成該操作?我在下面看到你的答案,但是這也需要全表掃描來評估「單詞」,不是嗎? – chris85

0

MySQL的REGEXP不能很好地處理重音字母。也許在你有限的情況下它可以正常工作。

這裏有一個稍快的做法(雖然它仍然需要一個表掃描):(要檢查的口音,我從桌上拿起一個不同的字)

SELECT * FROM words 
    WHERE 'PLAutvälj' = 
     RIGHT('PLAutvälj', CHAR_LENGTH(word)) = word; 

相關問題