Oracle sql 将字符串分割成块

问题描述 投票:0回答:3

我有一个长为5倍数的字符串。所以长度可以是:5,10,15…… 我想把这个字符串分成 5 个字符的块来传递

IN
clausole:

String="00000111112222233333"

我愿意:

SELECT * FROM myTable WHERE  code IN ('00000','11111','22222','33333')

可以在Sql中做到这一点吗?

sql database oracle
3个回答
3
投票
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);
  1. 使用 connect by 生成所需的行数

  2. 对于每一行,从字符串开头开始查找任意 5 个字符,并获得第 N 次出现。


1
投票

使用分层查询来拆分字符串并

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

参见 http://sqlfiddle.com/#!4/d41d8/37139


0
投票

基于 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) 
© www.soinside.com 2019 - 2024. All rights reserved.