оракула от персонажа до персонажа - PullRequest
0 голосов
/ 05 марта 2019

У меня есть строка с несколькими / символами. Мне нужно обрезать строку до / после каждого символа. Пример строки "231/19 / 2812-27 / 1". Каждая отделка будет иметь свой собственный столбец.

Row1 | Row2 | Row3 | Row4 | Row5
231  | 19   | 2812 | 27   |  1

Пожалуйста, без регулярных выражений. Спасибо.

Редактировать: отредактировано, как строка должна быть обрезана и представлена ​​в виде таблицы (27/1)

Ответы [ 2 ]

1 голос
/ 05 марта 2019

попробуйте

select SUBSTR('231/19/2812-27/1',1,instr('231/19/2812-27/1','/',1)-1) col1,
SUBSTR('231/19/2812-27/1',instr('231/19/2812-27/1','/',1)+1,(instr('231/19/2812-27/1','/',1,2)-instr('231/19/2812-27/1','/',1))-1) col2 ,
SUBSTR('231/19/2812-27/1',instr('231/19/2812-27/1','/',1,2)+1,(instr('231/19/2812-27/1','-',1,1)-instr('231/19/2812-27/1','/',1,2))-1) col3 ,
SUBSTR('231/19/2812-27/1',(instr('231/19/2812-27/1','-',1,1)+1)) col4
from dual;
1 голос
/ 05 марта 2019

Прежде всего, я бы предложил представлять результат в строках, а не в столбцах, потому что в последнем случае вам нужно знать количество столбцов для построения запроса или использовать динамический SQL, который является более сложным и абсолютно избыточным в ваш случай.

Попробуйте это:

 with t as (select '231/19/2812-27/1' as str from dual)
 select regexp_substr(str,'[^/]+',1,level) as val
 from t
 connect by regexp_substr(str,'[^/]+',1,level) is not null

Да, это регулярное выражение и, на мой взгляд, самый простой способ достичь желаемого результата. Если вы не хотите использовать это, напишите свою собственную функцию для разбиения строки.

Но, если вы все еще хотите представить свой результат в столбцах, попробуйте следующее:

--edit  removed a , at the end
SELECT REGEXP_SUBSTR(t.value, '[^/]+', 1, 1) col1,
       REGEXP_SUBSTR(t.value, '[^/]+', 1, 2) col2,
       REGEXP_SUBSTR(t.value, '[^/]+', 1, 3) col3,
       REGEXP_SUBSTR(t.value, '[^/]+', 1, 4) col4
FROM (select '231/19/2812-27/1' as value from dual) t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...