Aというテーブルにa1とa2、a3、a4といったカラムがあります。
各カラムには英数字で構成された文字が格納されています。
例えば hatena という値が入っているカラム名を調べたい場合、どうしたらいいのでしょうか?SQL文をお願いいたします。
http://www.mars.dti.ne.jp/~o-shin/new/kowaza/body530.html
DECODE$B4X?t$H(BSIGN$B4X?t$NL%NO(B - ORACLE$B>.5;H"(B
SELECT DECODE(a1,’hatena’,’a1’),DECODE(a2,’hatena’,’a2’),DECODE(a3,’hatena’,’a3’),DECODE(a4,’hatena’,’a4’)
FROM A
WHERE
a1 = ’hatena’ OR a2 = ’hatena’ OR a3 =’hatena’ OR a4 =’hatena’
このようにすれば、それぞれレコードごとに hatena という値が 入っているカラム名が 表示されます。
言語内でフェッチしたら駄目なんですかね? まともにやろうとすると無理っぽいのですが、今回の与えられた条件であれば、書くことはできます。
-----SQL FOR ORACLE ---------
SELECT CNAME FROM (
SELECT CNAME,DCLM FROM
(SELECT ’a1’ CNAME,a1 DCLM FROM A
UNION ALL
SELECT ’a2’ CNAME,a2 DCLM FROM A
UNION ALL
SELECT ’a3’ CNAME,a3 DCLM FROM A
UNION ALL
SELECT ’a4’ CNAME,a4 DCLM FROM A
) ALLCLMDATA
WHERE DCLM LIKE ’%hatena%’
) GROUP BY CNAME
-------END OF SQL---------
-------DML START ---------
Drop Table A;
Create Table A (
a1VARCHAR2 (50)not null,
a2VARCHAR2 (50)null,
a3VARCHAR2 (50)null,
a4VARCHAR2 (50)null
)
;
Alter Table A ADD CONSTRAINT PK_A Primary Key (
a1
);
---------DML END ---------
----------DATA (CSV) -----
”AAAA”,”BBBB”,”CCCC”,”EDD”
”CDE”,”DD”,”EESS”,”EEE”
”VVVDD”,”DCDD”,”EEEE”,”SSSS”
”HATENA”,”HAHAHA”,”WAHAHA”,”SHIDHF”
”hatena”,”SSSS”,”EEEEE”,”DDDD”
”DDDDD”,”hatena”,”EEEEE”,”DDDCC”
”WWWW”,”EEEEE”,”ERERE”,”CCCCC”
------- DATA END --------
------- RESULT ----------
CNAME
-----
a1
a2
------- RESULT END ------
以上のようになりますが、カラム名がn個というように不特定であったりすると難しいように思えます。
回答ありがとうございます。
残念ながら使用しているDBはMySQLなんです。ん〜やっぱり無理なんでしょうか?
ありがとうございました。
回答ありがとうございました。
何回か試してみましたがエラーが出てしまいます。ところでDECODE関数は暗号化された値を復元するものと聞きましたがなぜこの関数でカラム名が表示されるのでしょうか?