问题描述
嗨,
我有一个列中可能包含多达6000个字符长度字符串的行。我想检查字符串的长度,然后将字符串拆分为每个长度2000的较小字符串,并将其插入第二个表中。我只想在sql中做到这一点。请帮帮忙。
例如,如果一行包含4000个长度的字符串,我将只得到2个较小的字符串2000年char并在第二个表中插入2行。
谢谢
索拉布
这是一种方法:
-用一个虚拟表交叉连接您的行,该虚拟表具有 (至少) 要将字符串拆分成的行的数量。例如,从您的示例4000/2000 = 2
-Substr字符串,从 ((N - 1) * M) 1点开始,其中
-N是虚拟表的当前行
-M是每个输出行中想要多少个字符
把它们放在一起,你会得到这样的东西:
我有一个列中可能包含多达6000个字符长度字符串的行。我想检查字符串的长度,然后将字符串拆分为每个长度2000的较小字符串,并将其插入第二个表中。我只想在sql中做到这一点。请帮帮忙。
例如,如果一行包含4000个长度的字符串,我将只得到2个较小的字符串2000年char并在第二个表中插入2行。
谢谢
索拉布
这是一种方法:
-用一个虚拟表交叉连接您的行,该虚拟表具有 (至少) 要将字符串拆分成的行的数量。例如,从您的示例4000/2000 = 2
-Substr字符串,从 ((N - 1) * M) 1点开始,其中
-N是虚拟表的当前行
-M是每个输出行中想要多少个字符
把它们放在一起,你会得到这样的东西:
with rws as (
select level x from dual
connect by level <= 10
), strs as (
select lpad('1234568790', 100, '1234568790') str from dual
select x, substr(str, 1 + ((x-1)*10), 10) sub
from rws cross join strs;
X SUB
1 1234568790
2 1234568790
3 1234568790
4 1234568790
5 1234568790
6 1234568790
7 1234568790