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

问题描述:

我从表中获取员工的手机号码。如果逗号存在,删除昏迷后字符串中的所有字符

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

此外手机号码有连字符-登录,我也想删除它。

例如:

0300-123766, 0312-8789709 

我所要的输出是:

030

我的代码被一个以上的移动电话号码工作正常,但存在这样的列有可能只有一个手机号码 。

我试过下面的代码:

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

但这种字符串时有一个逗号唯一的工作,否则它返回null。

我该如何解决这个问题?

请帮助

+0

的可能的复制http://*.com/questions/17421448/query-to-remove-all-characters-after-last-comma-in-string –

+0

没有这是这个问题,因为不同在这里,我要求检查字符串是否包含逗号,如果它没有逗号,它将不起作用 –

可以使用case表达式来做到这一点。获得高达子使用regexp_substr字符串中的第一逗号

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 

另一种方式。

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

感谢它为我工作 –

这个技巧将使您的查询工作:mobile_tel || ','


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

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

我已使用表名 - 号码 列名 - 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