パンプキンスパイスラテ

IT系のことが多めの日記帳です

リスト形式のデータから一致検索

よく、「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,%';

MySQLOracleでは「CONCAT()」を使えばできると思う。
こうすると、データ自体は普通にリスト形式で「2,3,11,12,13」みたいにしても大丈夫。DBのカラムを「,カラム名,」と加工して「,値,」を検索するというわけ。これでいいのかなぁ。