2017-02-05 11 views
-1

Мне нужна помощь с разделителями в sql. Я работаю над DB2, но Oracle тоже хорош.sql separators (DB2, но ORACLE тоже может быть)

Мне нужно создать запрос, где у меня есть данные в формате: [email protected] где 'aaa', 'bbb', 'ccc', 'ddd' не имеет постоянной длины. Запрос должен возвращать bbb и ddd. В DB2 я могу разрезать «@ domain.com», что делает меня очень длинной. Покой я не знаю, как двигаться. Я пробовал с SUBSTR, но ничего не работает, как если бы мои запросы были слишком длинными.

Мне нужен запрос не блокировать. Пример: данные в колонке:

[email protected] 
[email protected] 
[email protected] 

т.д.

В общем случае мне нужно получить данные из промежутка между 1-ой и 2-го сепаратора . и тот, который находится в передней части @.

+0

Есть ли ограничения на количество разделителей? Вы показываете максимум три в сегменте до «@». Есть ли у всех строк четыре? Возможно четыре или разрешено? Это минимум два? – user2338816

ответ

0

Уверен, что у кого-то будет хороший способ REGEX, но это один из способов сделать это.

with test as 
(select '[email protected]' col1 from dual union all 
select '[email protected]' from dual union all 
select '[email protected]' from dual 
) 
select col1 
     , substr(col1, 1, dot_one-1) f1 
     , substr(col1, dot_one+1, dot_two - dot_one -1) f2 
     , no_domain 
     , substr(no_domain, dot_before_at+1) f3 
from 
(
select col1 
     ,instr(col1, '@', -1) at_pos 
     ,instr(col1, '.',1,1) dot_one 
     ,instr(col1, '.',1,2) dot_two 
     ,substr(col1, 1, instr(col1, '@', -1)-1) no_domain 
     ,instr(substr(col1, 1, instr(col1, '@', -1) -1) , '.', -1) dot_before_at 
from test 
) 

 Смежные вопросы

  • Нет связанных вопросов^_^