2010-02-16 107 views
3

給定一個輸入字符串,我想返回包含匹配字符串的通配符表達式的(MySQL)數據庫中的行。舉例來說,如果我有一個包含這些通配符表達式的表:匹配文本與數據庫中的通配符表達式?

foo.* 
foo.bar.* 
erg.foo.* 

和我的輸入字符串爲「foo.bar.baz」,那麼我應該得到的行爲「foo。*」和「foo.bar。 *」。

有關如何實現這一點的任何想法?我希望可以用查詢來完成,但我可能必須選擇所有相關的行並在應用程序中進行匹配。

回答

3
SELECT * 
FROM mytable 
WHERE 'foo.bar.baz' RLIKE match 

您不僅限於通配符,並且可以使用任何正則表達式MySQL支持。

不過,如果你只想處理星號通配符,你可以使用這個語法:

SELECT * 
FROM mytable 
WHERE 'foo.bar.baz' LIKE REPLACE(REPLACE(REPLACE(REPLACE('\\', '\\\\'), '.', '\\.'), '%', '\\%'), '*', '%') ESCAPE '\\' 
+0

這正是我一直在尋找,謝謝!我認爲我的想法彌補了它會變得複雜,所以我沒有看到明顯的。 – fizban 2010-02-16 12:16:56