一行传入记录连接了多个子记录。每个子记录长度为9个字符。我每行有8个这样的子记录。所以每行都是(8x9 = 72个字符)。有没有办法可以将1条记录分成8条记录?
123456789123456789123456789123456789123456789123456789123456789123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
123456789
我知道我可以通过8个子查询来实现这一点并将它们联合起来..有更好的方法吗?
答案 0 :(得分:2)
或者如何:
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 :(得分:1)
我看到人们使用仅包含值1到8的辅助表,然后加入该表。您可以使用该值来对记录进行子串。
像
这样的东西SELECT SUBSTRING(long_val, eight.value * 9, 9)
FROM mytable, eight
注意:查询未经测试,但我希望这个想法得以实现。
答案 2 :(得分:1)
如果可以预测每一行总是会分成固定数量的行,那么应该可能出现以下情况:
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子查询应该是(SELECT ROWNUM as iterator FROM dual CONNECT BY LEVEL&lt; = 8)