menu
書いてる野郎
orebike@gmail.com
SQL の関数の性質として、戻り値が複数の値を取ることは無いので split 関数のような関数は残念ながら無い。
しかし、やりたいことの意図としておそらく・・・「何かデリミタを指定して文字列を分割してそこから1個取り出したいんだよ!」ということだと思う。 それならやり方はある。
よくある「カンマ区切り」のデータもこの状況。 この逆パターンで指定の区切りで出力したいなら MySQL/縦持ちデータを横持ちにする これ
下記のように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);