UNPIVOT に近い、わざわざSQLで行うことがナンセンスな気もしたが、
split 対象の文字列を mybatis などから動的パラメータとして指定して結果を他のテーブルと結合して
処理するSQLなど応用範囲は広がると思った。
Oracle の場合のサンプル
’A,B,C' をカンマ区切りで分割、
WITH strings AS ( SELECT 'A,B,C' AS value FROM dual ) , splits AS ( SELECT lines.column_value AS position , REGEXP_SUBSTR(strings.value,'[^,]+', 1, lines.column_value) AS split_value , COUNT(*) OVER() AS splitlength FROM strings ,TABLE(CAST(MULTISET(SELECT LEVEL FROM dual CONNECT BY REGEXP_SUBSTR(strings.value, '[^,]+', 1, LEVEL) IS NOT NULL) AS sys.odciNumberList ) ) lines ) SELECT * FROM splits
結果、、
| position | split_value | splitlength |
| 1 | A | 3 |
| 2 | B | 3 |
| 3 | C | 3 |