【MySQL】CSV形式でデータを入れたテキスト型のカラムを検索する
こんなデータがあるとする。
+----+----------+ | id | name | +----+----------+ | 1 | 1,2,3 | | 3 | 1,23,3,4 | | 4 | 1,2,3,5 | | 5 | 1,2,6,3 | | 2 | 1,33 | +----+----------+
- like でやると
-
select * from bm where concat(',', name, ',') like '%,3,%'
→先頭と末尾にカンマ(,)を付ければ、単純なlike検索で書ける。
- 正規表現でやると
-
select * from bm where name REGEXP '(^|,)3(,|$)'
→ 「行頭またはカンマがあって、数字がきて、カンマまたは行末がくる」にマッチする行を抽出。
速度は like に対して正規表現が2割ほど遅いぐらい。
この程度の差なら、あとは好みで。
hoge 2020年9月10日 18:16
find_in_setが使えるかも?