SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 社員募集 ...

【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割ほど遅いぐらい。

この程度の差なら、あとは好みで。

関連するメモ

コメント(1)

hoge 2020年9月10日 18:16

find_in_setが使えるかも?