2009-08-27 57 views
5

好給我有一個值我想在一個數據庫來檢查潛在的匹配(在一個varchar字段),所以我寫的東西,如:MySQL的問題

SELECT * FROM table WHERE column LIKE "%value%" 

如果這將工作值是像「測試」,列有「這是一個測試」,然而,如果是相反的話,我不會得到一個比賽我已經沿着線試過的東西值:

SELECT * FROM table WHERE CONCAT("%",column,"%") LIKE "value" 

但不要我不確切地知道如何將這句話提交給Google以獲得我需要的回覆,請幫助!

+1

你爲什麼要這麼做? – 2009-08-27 16:03:35

+0

似乎他有一系列的列名與類似的東西,並希望看看他的'價值'是否包含在任何這些... – Irfy 2009-08-27 16:05:40

+0

不能自由地說。 – 2009-08-27 16:05:56

回答

11

您可以反轉like聲明。只要使用相同的語法作爲一個普通like查詢:

select 
    * 
from 
    table 
where 
    'value' like concat('%', column, '%') 

當然,如果你覺得野性和瘋狂,你也可以使用instr

select * from table where instr('value', column) > 0 

我不知道哪一個是快,因爲我沒有一個MySQL實例可以測試,但值得一試,看看哪些是勝利。

+0

+1首先回答。這看起來不錯。 – 2009-08-27 16:05:57

+0

很酷,不知道這甚至是可能的! – Irfy 2009-08-27 16:07:32

+1

它將使用索引(如果列存在)轉換數據 - 不會查找。使用內聯視圖可以更快地將所需內容添加到列中,然後進行比較。如果您只想要出現該單詞的行,則最好使用INSTR。 – 2009-08-27 16:15:30

3
SELECT * 
FROM table 
WHERE 'value' LIKE CONCAT('%', column, '%')