2013-01-02 36 views
-1

我有一個關於mysql的基本問題。在我的表'table'中,我有一個名爲'foo'(String)的列。我想這樣做:MySQL - 如何在WHERE子句中爲列名使用通配符?

SELECT * FROM table WHERE %foo% LIKE '%thing%' 

但它顯然是不正確的。提前致謝。

+0

所以你要列名使用通配符在'鍵%''爲KEY1,KEY2匹配,.etc'? –

+0

我需要的是使用'%'操作符不是爲了嚴格,而是從列名中獲得值 – radek

+0

可能出現[使用相同值SQL匹配多個列]的重複(http://stackoverflow.com/questions/14116292/match-multiple- column-with-same-value-sql) –

回答

4
SELECT * FROM table WHERE key like '%sth%' 
+0

是的,這很明顯,但我的問題是,較短的'鍵'必須是......的一部分,而不是其他方式 – radek

+0

'KEY'是一個保留關鍵字。需要引用backtick.s –

+0

假設表中有akey1,bkey2,ckey3等列...有沒有辦法搜索像'xyz'這樣的%key%這樣的公共值? –

1
select * from table where key like '%sth%' 
0

首先關鍵是保留關鍵字。所以你可能需要添加 方括號 引用反引號左右。其次,你需要正確使用通配符。許多答案已經告訴你。根據樣本數據進行設置。

Set @sth:= 'joh' 

方法2是使用REGEXP。方法3是使用instr

select * from landlord 
where instr(`key`,@sth) > 0 
; 

你也可以嘗試matchagainst。但是,部分字符串似乎不起作用。

這是一個FullText搜索和你的表必須能夠做到這一點。 MYISAM is the only table type that can do fulltext search。假設你沒有啓用它,那麼你可以使用以下Alter行模式表。使用FullText搜索,您實際上在key列中添加了索引。索引搜索變得更快。

`ALTER TABLE mytable ENGINE = MYISAM;` 

Alter Table mytable 
Add FULLTEXT(`key`) 
; 

Select * from mytable 
where match(`key`) 
against(%@sth% IN BOOLEAN MODE) 
; 

* SQLFIDDLE DEMO

+0

不連接在MySQL中'[]'。標識符用反引號引用。 –

+0

@MichaelBerkowski或者,更正確地(給出適當的設置),用雙引號。 – 2013-01-02 02:45:41

+0

@pst在默認情況下,MySQL是ANSI_QUOTES嗎?我不這麼認爲。 –