2014年11月29日土曜日

[MySQL]正規表現REGEXPのメモ

MySQLのRegular Expressions、m修飾子にあたるものがなくてちょっと悩んだメモ。


mysql> mysql> select text from test\G
*************************** 1. row ***************************
text: hello
*************************** 2. row ***************************
text: hello world
*************************** 3. row ***************************
text: hello
good bye
*************************** 4. row ***************************
text: good morning
hello
good night
4 rows in set (0.00 sec)
みたいなテーブルから、helloという行を含むのを抽出したかったのだけれど、
mysql> select text from test where text regexp '^hello$';
+-------+
| text  |
+-------+
| hello |
+-------+
1 row in set (0.01 sec)
まぁ、これでは無理。

mysql> select text from test where text regexp '(^|\n)hello($|\n)';
+-------------------------------+
| text                          |
+-------------------------------+
| hello                         |
| hello
good bye                |
| good morning
hello
good night |
+-------------------------------+
3 rows in set (0.00 sec)
こうするしかないのか。

ちょっと気持ち悪いことをして、こうするとか。
mysql> select text from test where find_in_set('hello', replace(text,'\n',','));
+-------------------------------+
| text                          |
+-------------------------------+
| hello                         |
| hello
good bye                |
| good morning
hello
good night |
+-------------------------------+
3 rows in set (0.00 sec)
まぁ、これだと"hello,hello"みたいな行まで抽出されるだろうしダメか。