Пробовал с помощью split (). Кажется, очень медленно. Ниже показано 14,817 сек c.
WITH TAB (ID, PROFILE) AS
(
VALUES
('BOB', cast('BM BS DM FM IC IC6 IL IM JN101 MM XC XM XR' as char(1000))),
('BILL', cast('ZZ XY' as char(1000)))
)
SELECT a.id, b.element as profile
from tab a,
TABLE (systools.split(a.profile , ' ')) b
where b.element <> '';
По сравнению с ответом Иоахима, заняв всего 134 мс!
WITH TAB (ID, PROFILE) AS
(
VALUES
('BOB', cast('BM BS DM FM IC IC6 IL IM JN101 MM XC XM XR' as char(1000))),
('BILL', cast('ZZ XY' as char(1000)))
)
SELECT a.id, b.item as PROFILE
from tab a
,XMLTABLE('$doc/items/item'
PASSING XMLPARSE(DOCUMENT CAST( '<items><item>'
|| replace(a.profile , ' ' , '</item><item>')
|| '</item></items>' as CLOB
)
) as "doc"
COLUMNS
ITEM VARCHAR(255) PATH '.'
) b
WHERE b.item <> '';