mysqlで列のデータをデリミタで分割する
telephone : 0123-123-456
というデータを
tel1: 0123 tel2: 123 tel3: 456
と苦労して分割するsql
mysqlではsplit関数みたいなのが見つからなかったのでlocate,substr,lengthを使って取り出して見ました。
select
telephone,
SUBSTRING(telephone, 1, LOCATE(’-',telephone)-1) tel1,
SUBSTRING(SUBSTRING(telephone, LOCATE(’-',telephone)+1), 1, LOCATE(’-',SUBSTRING(telephone, LOCATE(’-',telephone)+1))-1) tel2,
SUBSTRING(telephone,
LENGTH(SUBSTRING(telephone, 1, LOCATE(’-',telephone)-1))+
LENGTH(SUBSTRING(SUBSTRING(telephone, LOCATE(’-',telephone)+1), 1, LOCATE(’-',SUBSTRING(telephone, LOCATE(’-',telephone)+1))-1))+3) tel3
from members
実行結果
| telephone | tel1 | tel2 | tel3 |
|---|---|---|---|
| 0123-123-456 | 0123 | 123 | 456 |