2011-09-16 6 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' 

わからないこれを使用する方法特定の列セットをテーブルに照会するように設定します。おそらくあなたは何とかこれらの2つのアプローチを組み合わせることができますか?

+0

あなたがやっていることを達成するためのより良い方法があります。 –

関連する問題