2014-10-30 5 views
0

У меня есть строка с длинным кратным 5. Таким образом, длина может быть: 5,10,15 ...... Я бы разделил эту строку на куски из 5 символов, чтобы пройти в IN clausole:Oracle sql split string в chuncks

String="00000111112222233333" 

я бы:

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

Есть возможность сделать это в Sql?

+0

Я вижу, у вас есть "String =". Вы вызываете SQL с другого языка (Java и т. Д.) Или это просто, чтобы показать, что такое исходная строка? – Ascalonian

+0

Да, я звоню sql от Ibatis – user1066183

ответ

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. Использование подключение с генерировать желаемое количество строк

  2. Для каждой строки найти любые 5 символов, начиная с начала строки и получить Nth вхождения.

+0

Это решение работает очень хорошо для меня. – user1066183

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