MySQL/splitのように文字列の一部を抜き出す

MySQL/splitのように文字列の一部を抜き出す

SQL の関数の性質として、戻り値が複数の値を取ることは無いので split 関数のような関数は残念ながら無い。

しかし、やりたいことの意図としておそらく・・・「何かデリミタを指定して文字列を分割してそこから1個取り出したいんだよ!」ということだと思う。 それならやり方はある。

よくある「カンマ区切り」のデータもこの状況。 この逆パターンで指定の区切りで出力したいなら MySQL/縦持ちデータを横持ちにする これ

SUBSTRING_INDEX を使う

下記のように2個の文字列がアンスコ(アンダースコア、アンダーバー)で繋がっているような場合

abc_efg

そこで、このアンスコをデリミタとしてデリミタ前(この例なら abc)の値を取り出したい場合。 下記の指定で取り出せる。これは1個目のデリミタの前部分を全部よこせという指定になる。 これに2を指定すると2個めのデリミタ前になるが、2個目は無いので全部ということになる。

SUBSTRING_INDEX('abc_efg', '_', 1)

ではこのデリミタ後ろ(この例なら efg)を取り出す場合は、 下記のようにマイナス値を指定してやる。これは後ろから数えて1個目デリミタ以降を取り出すということになる。

SUBSTRING_INDEX('abc_efg', '_', -1)

3個、4個ならどうなのかという話だが、何も考えなければ、この関数を2回使えば任意の位置のパラメータを抜き出すことができる。

つまり、3個目の値を取りたいなら、このようになる

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('abc_efg_hig_klm', '_', 3), '_', -1);

参考サイト

タグ

db/mysql/pickup_part_of_string_like_split_function.txt · 最終更新: 2018-03-13 09:55 by ore