2011-09-16 42 views
4

所以我有一個有很多列的表。假設每列都包含相似的關鍵字,只有少數幾個不同。我想根據他們相似的關鍵字選擇這些列。在MySQL中選擇使用REGEXP的列

起初,這是我的嘗試:

SELECT * REGEXP 'pages_title$' FROM 'pages'; 

也就是說,與pages_title結尾的列應該被選中。所以REGEXP應該適用於列的名稱,而不是任何條目。這可能嗎?我在網上找到的所有示例都與使用REGEXP隔離表中的某些值有關,這不是我想要的。

+1

不,這沒有任何意義。列名是固定的,爲什麼你需要一個正則表達式來選擇它們。 REGEXP只適用於價值。 – TheCodeKing

+0

好吧,這個想法是其他列以後添加(具有類似的關鍵字)。當我添加其他列時,我希望代碼能夠工作,而不必考慮代碼中添加的列。所以這純粹是不可行的? – id2341677

+0

是的,這可以通過查詢'information_schema'表和構建動態SQL來實現。但我不會推薦這麼做。修復你的數據庫設計。 – NullUserException

回答

0

REGEXP是指在查詢WHERE一部分 - 你不能用它來選擇您想獲取的列列表...

爲了您的事業,你需要編程獲取表的詳細信息(如DESC pages)和然後使用任何編程語言匹配並建立列的列表,並在查詢中使用它們...

0

這不是一個完整的答案,但它可能會得到一些滾動。您可以動態地構建查詢:

declare @q varchar(1000) 
set @q = 'select ' + @columnName + ' from table' 
EXEC(@q) 

否則,你可以從表中得到一組選定的列名的,像這樣(MS T-SQL):

select name from DB.sys.syscolumns 
where id=(
    select id 
    from DB.sys.sysobjects 
    where xtype='U' 
    and name='pages' 
) 
where name LIKE '%pages_title' 

不知道如何使用此設置爲查詢您的表以獲取特定的一組列。也許你可以以某種方式結合這兩種方法?

+0

有更好的方法來實現你在做什麼,爲什麼不選擇*? –