我从表中获得了员工的手机号码。
问题是有一个或多个数字保存在一个用逗号分隔的列中,我想只得到第一个手机号码。
此外,手机号码还有连字符-
,我也想将其删除。
例如:
0300-123766, 0312-8789709
我希望输出为:
0300123766
我的代码适用于多个手机号码,但该列可能只有一个手机号码。
我尝试过以下代码:
SELECT
mobile_tel,
replace(substr(mobile_tel, 1, instr(mobile_tel, ',') -1), '-', '')
FROM tbl;
但这仅在字符串有逗号时才有效,否则返回null。
我该如何解决这个问题?
请帮助
答案 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