我正在尝试从Oracle数据库表中获取电话号码。电话号码可以用逗号或“/”分隔。现在我需要拆分那些带有“/”或逗号的条目并获取第一部分。
答案 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
;
答案 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.
这通常有效。如果你有逗号和斜杠的行,它会失败。