27 окт. 2011 г.

строку в столбец

Элегантное решение по преобразованию строки с разделителем, в столбец:

select
  regexp_substr('1,2,3,4,5','[^,]',level)
from dual
connect by regexp_substr('1,2,3,4,5','[^,]',1,level) is not null

5 комментариев:

  1. Ага и наоборот
    SELECT
    tname,
    LISTAGG(phone, ' ; ') WITHIN GROUP (ORDER BY phone) phonestr
    FROM cl_phones
    GROUP BY tname

    ОтветитьУдалить
    Ответы
    1. К сожалению LISTAGG будет работать только в 11g

      Удалить
  2. может так?
    select
    regexp_substr('1,2,3,4,5','[^,]',1,level)
    from dual
    connect by regexp_substr('1,2,3,4,5','[^,]',1,level) is not null

    ОтветитьУдалить
    Ответы
    1. Только работает он для цифр, а вот запрос, который работает для чисел
      select
      regexp_substr('10,100,23456285','[[:digit:]]+',1,level)
      from dual
      connect by regexp_substr('10,100,23456285','[[:digit:]]+',1,level) is not null

      Удалить
  3. Подскажите, а как сделать тоже самое для нескольких строк с добавлением row_number?

    ОтветитьУдалить