2013-07-10 59 views
1

這是一種簡單化,但我無法找到適用於此特定情況的任何內容。將一個字符串拆分爲格式化字母,用於Where IN查詢

我試圖通過Mysql查詢找到結果,其中db中的項是字符串的一個字母。例如,我有字符串「MYSQL」,我需要與M或的標識和標識Q.

所以分貝看起來像這樣

name  identifier 
item1  M 
item2  Q 
item3  B 

,我想檢索數據庫的一切搜索'MYSQL'返回item1和item2。

一個LIKE不工作,所以我嘗試了其中但那不工作,除非我喜歡格式化「M」,「Y」,「S」的文字...等

其心不是出了問題,但我有一種感覺,有一種更有說服力的方式來做到這一點。提前致謝。

+0

你只在MySQL中實現它堅持?如果使用PHP構建查詢,那很容易 –

+0

這是什麼意思:「LIKE'不起作用」? – arkascha

回答

0

你可以使用這個字符串函數

SELECT * FROM table_name WHERE LOCATE(identifier, "mysql")>0 
0

使用REGEXP。

如果使用單個字符標識符創建正則表達式,可以將其與您想要的單詞進行匹配。例如:

select * from TABLENAME 
where 'MySQL' REGEXP concat('.*', identifier, '.*'); 

這會給你帶'M'和'Q'的行但不帶'B'的行。

+0

爲什麼是正則表達式?它減慢了查詢速度,你只需模擬類似操作符的普通'%'通配符... – arkascha

0

你可能會做你的LIKE倒退。

在Oracle味語法,你會使用:WHERE 'MYSQL' LIKE UPPER('%' || identifier_col || '%')其中||是字符串連接%是通配符。

0

爲什麼不能使用字符串連接和LIKE運算符?

SELECT name FROM table_identifiers 
    WHERE UCASE('MYSQL') LIKE UCASE(CONCAT('%', identifier, '%'))