如果逗号存在,删除昏迷后字符串中的所有字符
问题描述:
我从表中获取员工的手机号码。如果逗号存在,删除昏迷后字符串中的所有字符
问题是有一个或多个数字被保存在一列中用逗号隔开,我只想得到第一个手机号码。
此外手机号码有连字符-
登录,我也想删除它。
例如:
0300-123766, 0312-8789709
我所要的输出是:
030
我的代码被一个以上的移动电话号码工作正常,但存在这样的列有可能只有一个手机号码 。
我试过下面的代码:
SELECT
mobile_tel,
replace(substr(mobile_tel, 1, instr(mobile_tel, ',') -1), '-', '')
FROM tbl;
但这种字符串时有一个逗号唯一的工作,否则它返回null。
我该如何解决这个问题?
请帮助
答
可以使用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
的可能的复制http://*.com/questions/17421448/query-to-remove-all-characters-after-last-comma-in-string –
没有这是这个问题,因为不同在这里,我要求检查字符串是否包含逗号,如果它没有逗号,它将不起作用 –