リスト形式のデータから一致検索
よく、「1,2,3,4,5」とリスト形式でデータを持ってるDBから、例えば「1」が含まれているものをSELECT文で読み込む、ってことがある。あまり考えずに、
SELECT * FROM テーブル名 WHERE カラム名 LIKE '%1%';
とやってしまうと、「2,3,11,12,13」などのデータも拾ってきてしまう。「11」も「'%1%'」に含まれてしまうから。だから今までこういう時は、データ自体に「|,2,3,11,12,13,|」とか「0,2,3,11,12,13,0」みたいに、前後に文字列を追加して、
SELECT * FROM テーブル名 WHERE カラム名 LIKE '%,1,%';
とできるようにしてた。でもさ、もっとうまいやり方があるんじゃないかと思っていろいろ調べてみた。
本当に正しいやり方なのかわからんけど、これでうまくいく。
SQLserver限定
SELECT * FROM テーブル名 WHERE ','+カラム名+',' LIKE '%,1,%';
MySQLとOracleでは「CONCAT()」を使えばできると思う。
こうすると、データ自体は普通にリスト形式で「2,3,11,12,13」みたいにしても大丈夫。DBのカラムを「,カラム名,」と加工して「,値,」を検索するというわけ。これでいいのかなぁ。