我有一个长为5倍数的字符串。所以长度可以是:5,10,15…… 我想把这个字符串分成 5 个字符的块来传递
IN
clausole:
String="00000111112222233333"
我愿意:
SELECT * FROM myTable WHERE code IN ('00000','11111','22222','33333')
可以在Sql中做到这一点吗?
select regexp_substr(s, '.{5}', 1, lvl) chnk
from (select s, level lvl
from (select '00000111112222233333' s from dual)
connect by level <= length(s) / 5);
使用 connect by 生成所需的行数
对于每一行,从字符串开头开始查找任意 5 个字符,并获得第 N 次出现。
substr
提取每个数据块:
with data as (select '00000111112222233333' s from dual)
select substr(s, (level-1)*5+1, 5) chnk
from data
connect by level <= length(s)/5
基于 Sylvain Leroux 的回答,如果您需要最后一个块,即使它的长度较小(这里使用 5 个块):
with data as (select '0000011111222223' s from dual)
select substr(s, (level-1)*5+1, 5) chnk
from data
connect by (level-1)*5+1 <= length(s)