Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Новый топик    Ответить
 split_to_table  [new]
Skiv-mag
Member

Откуда:
Сообщений: 52
Здравствуйте!

Ранее работал с PostgreSQL, сейчас разбираюсь с DB2.
В потгресе была функция regexp_split_to_table.
С помощью нее можно было сделать примерно следующее
with x (id, text)  as 
(
	values(1, 'q,w,e,r,t,y')
	union all
	values(2, 'a,s,d,f,g')
)

select id, regexp_split_to_table (x.text, ',') as text from x


Результат
 id text
 -- ----
  1 q
  1 w
  1 e
  1 r
  1 t
  1 y
  2 a
  2 s
  2 d
  2 f
  2 g


В DB2 такую штуку можно провернуть с 1 строчкой сделав функцию возвращающую table.
Несколько же строчек засплитить никак не получается(ну оно и понятно, что такое поведение для table не предусмотрено)
Никто не подскажет как это сделать? Пока что вижу перспективу только делать какой-нибудь страшный рекурсивный запрос, на каждой итерации после split_to_table делая union all.
18 июн 12, 15:28    [12732253]     Ответить | Цитировать Сообщить модератору
 Re: split_to_table  [new]
Mark Barinstein
Member

Откуда: Москва
Сообщений: 4946
Skiv-mag,

Здравствуйте.

Наверное, так удобнее будет:
+ regexp_tokenize
create function regexp_tokenize(
  source clob(2M)
, pattern varchar(128))
returns table (seq int, tok varchar(4000))
contains sql
deterministic
no external action
return
select seq, tok
from xmltable('for $id in tokenize($s, $p) return <i>{string($id)}</i>' 
passing 
  source as "s"
, pattern as "p"
columns 
  seq for ordinality
, tok varchar(4000) path '.'
) t;

select x.id, t.tok
from table(values 
  (1, 'q,w,e,r,t,y')
, (2, 'a,s,d,f,g')
) x(id, text)
, table(regexp_tokenize(x.text, ',')) t
18 июн 12, 18:01    [12733895]     Ответить | Цитировать Сообщить модератору
 Re: split_to_table  [new]
Skiv-mag
Member

Откуда:
Сообщений: 52
Спасибо большое!
Никогда раньше не имел дела с XQuery, надо будет хорошо покопаться.
18 июн 12, 19:09    [12734206]     Ответить | Цитировать Сообщить модератору
Все форумы / IBM DB2, WebSphere, IMS, U2, etc Ответить