разделить строку в запросе оракула - PullRequest
1 голос
/ 03 ноября 2010

Я пытаюсь получить номера телефонов из таблицы базы данных Oracle.Номера телефонов могут быть разделены запятой или "/".Теперь мне нужно разделить те записи, которые имеют "/" или запятую, и получить первую часть.

Ответы [ 3 ]

6 голосов
/ 03 ноября 2010

Следуйте этому подходу,

with t as (
  select 'Test 1' name from dual
  union
  select 'Test 2, extra 3' from dual
  union
  select 'Test 3/ extra 3' from dual
  union
  select ',extra 4' from dual
)
select
  name,
  regexp_instr(name, '[/,]') pos,
  case
    when regexp_instr(name, '[/,]') = 0 then name
    else substr(name, 1, regexp_instr(name, '[/,]')-1) 
  end first_part
from
  t
order by first_part
;

alt text

2 голосов
/ 03 ноября 2010

Поиск функций substr и instr или решение головоломки с помощью регулярных выражений.

1 голос
/ 03 ноября 2010

Я добавил тест таблицы с одним столбцом phone_num.И добавлены строки, похожие на ваше описание.

select *
from test;

PHONE_NUM
------------------------------
0123456789
0123456789/1234
0123456789,1234

3 rows selected.


select 
 case
  when instr(phone_num, '/') > 0 then substr(phone_num, 0, instr(phone_num, '/')-1)
  when instr(phone_num, ',') > 0 then substr(phone_num, 0, instr(phone_num, ',')-1)
  else phone_num
 end phone_num
from test


PHONE_NUM
------------------------------
0123456789
0123456789
0123456789

3 rows selected.

Это обычно работает.Хотя произойдет сбой, если у вас есть строки с запятыми и косой чертой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...