在oracle查询中拆分字符串

时间:2010-11-03 10:00:43

标签: oracle split

我正在尝试从Oracle数据库表中获取电话号码。电话号码可以用逗号或“/”分隔。现在我需要拆分那些带有“/”或逗号的条目并获取第一部分。

3 个答案:

答案 0 :(得分:6)

遵循这种方法,

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

答案 1 :(得分:2)

查找substr和instr函数或使用regexp解决难题。

答案 2 :(得分:1)

我添加了一个带有一列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.

这通常有效。如果你有逗号和斜杠的行,它会失败。