所以我有一個有很多列的表。假設每列都包含相似的關鍵字,只有少數幾個不同。我想根據他們相似的關鍵字選擇這些列。在MySQL中選擇使用REGEXP的列
起初,這是我的嘗試:
SELECT * REGEXP 'pages_title$' FROM 'pages';
也就是說,與pages_title
結尾的列應該被選中。所以REGEXP應該適用於列的名稱,而不是任何條目。這可能嗎?我在網上找到的所有示例都與使用REGEXP隔離表中的某些值有關,這不是我想要的。
所以我有一個有很多列的表。假設每列都包含相似的關鍵字,只有少數幾個不同。我想根據他們相似的關鍵字選擇這些列。在MySQL中選擇使用REGEXP的列
起初,這是我的嘗試:
SELECT * REGEXP 'pages_title$' FROM 'pages';
也就是說,與pages_title
結尾的列應該被選中。所以REGEXP應該適用於列的名稱,而不是任何條目。這可能嗎?我在網上找到的所有示例都與使用REGEXP隔離表中的某些值有關,這不是我想要的。
REGEXP
是指在查詢WHERE
一部分 - 你不能用它來選擇您想獲取的列列表...
爲了您的事業,你需要編程獲取表的詳細信息(如DESC pages
)和然後使用任何編程語言匹配並建立列的列表,並在查詢中使用它們...
這不是一個完整的答案,但它可能會得到一些滾動。您可以動態地構建查詢:
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'
不知道如何使用此設置爲查詢您的表以獲取特定的一組列。也許你可以以某種方式結合這兩種方法?
有更好的方法來實現你在做什麼,爲什麼不選擇*? –
不,這沒有任何意義。列名是固定的,爲什麼你需要一個正則表達式來選擇它們。 REGEXP只適用於價值。 – TheCodeKing
好吧,這個想法是其他列以後添加(具有類似的關鍵字)。當我添加其他列時,我希望代碼能夠工作,而不必考慮代碼中添加的列。所以這純粹是不可行的? – id2341677
是的,這可以通過查詢'information_schema'表和構建動態SQL來實現。但我不會推薦這麼做。修復你的數據庫設計。 – NullUserException