如果存在逗号,则在昏迷后删除字符串中的所有字符

时间:2016-12-01 05:36:09

标签: sql oracle

我从表中获得了员工的手机号码。

问题是有一个或多个数字保存在一个用逗号分隔的列中,我想只得到第一个手机号码。

此外,手机号码还有连字符-,我也想将其删除。

例如:

0300-123766, 0312-8789709

我希望输出为:

0300123766

我的代码适用于多个手机号码,但该列可能只有一个手机号码。

我尝试过以下代码:

SELECT 
    mobile_tel,
    replace(substr(mobile_tel, 1, instr(mobile_tel, ',') -1), '-', '')
FROM tbl;

但这仅在字符串有逗号时才有效,否则返回null。

我该如何解决这个问题?

请帮助

3 个答案:

答案 0 :(得分:3)

您可以使用case表达式执行此操作。

SELECT mobile_tel,
       case when instr(mobile_tel, ',') > 0
            then replace(substr(mobile_tel, 1, instr(mobile_tel, ',') -1),'-','')
            else replace(mobile_tel,'-','')
       end
FROM tbl

使用regexp_substr将字符串提升到字符串中第一个逗号的另一种方法。

select mobile_tel, 
replace(regexp_substr(mobile_tel,'(^[^,]+),?',1,1,null,1),'-','')
from tbl

答案 1 :(得分:0)

这个技巧会使您的查询有效:mobile_tel || ','

SELECT 
    mobile_tel,
    replace(substr(mobile_tel, 1, instr(mobile_tel || ',' , ',') -1), '-', '')
FROM tbl;

答案 2 :(得分:0)

尝试使用此查询,我相信它会得到您期望的结果 -

我使用了表名 - 数字 列名称 - ID,电话

SELECT id,
  CASE WHEN phone REGEXP ',' THEN replace(substr(phone, 1, instr(phone, ',') -1),'-','') ELSE replace(substr(phone, 1, phone),'-','') END
FROM numbers UNION SELECT id, replace(substr(phone, 1, phone),'-','') FROM numbers WHERE phone NOT REGEXP ',' ORDER BY id