Разбить один ряд на несколько рядов - PullRequest
1 голос
/ 27 октября 2011

Одна строка входящей записи содержит несколько вложенных записей. Каждая подзапись имеет длину 9 символов. У меня есть 8 таких вложенных записей в каждом ряду. Таким образом, каждая строка (8x9 = 72 символа). Есть ли способ, которым я могу разделить 1 запись на 8 записей здесь?

Введите

123456789123456789123456789123456789123456789123456789123456789123456789

выход

123456789

123456789

123456789

123456789

123456789

123456789

123456789

123456789

Я знаю, что могу сделать это с 8 подзапросами и объединить их ... есть ли лучший способ?

Ответы [ 3 ]

2 голосов
/ 27 октября 2011

или как об этом:

SELECT substr(t1.astr,n*9+1,9) 
FROM t1,
(SELECT ROWNUM-1 n FROM dual CONNECT BY LEVEL <= 8) t2

таблица t1 содержит ваши строки, таблица t2 представляет собой сгенерированный список последовательных чисел от 0 до 7 путем перекрестного соединения его с таблицей t1, которую мы можем использовать для вырезаниявверх по столбцу строки.

1 голос
/ 27 октября 2011

Если предсказуемо, что каждая строка всегда будет разбиваться на фиксированное количество строк, должно быть возможно что-то вроде следующего:

select  
    b.iterator,
    substr(a.mystring,b.iterator*9-8,9) as split
from

(select '123456789123456789123456789123456789123456789123456789123456789123456789' as mystring from dual) a,
(select 1 as iterator from dual union
 select 2 as iterator from dual union
 select 3 as iterator from dual union
 select 4 as iterator from dual union
 select 5 as iterator from dual union
 select 6 as iterator from dual union
 select 7 as iterator from dual union
 select 8 as iterator from dual) b

РЕДАКТИРОВАТЬ: итератор Кевина был проще и лучше, чем моя версия грубой силы,Подзапрос b должен быть (ВЫБЕРИТЕ ROWNUM в качестве итератора ОТ двойного CONNECT BY LEVEL <= 8) </p>

1 голос
/ 27 октября 2011

Я видел, как люди используют вторичную таблицу, содержащую только значения от 1 до 8, а затем соединяются с этой таблицей.Вы можете использовать это значение для подстроки вашей записи.

Что-то вроде

SELECT SUBSTRING(long_val, eight.value * 9, 9)
FROM mytable, eight

Примечание: запрос не проверен, но я надеюсь, что идея получится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...