2016-12-01 168 views
1

我從表中獲取員工的手機號碼。如果逗號存在,刪除昏迷後字符串中的所有字符

問題是有一個或多個數字被保存在一列中用逗號隔開,我只想得到第一個手機號碼。

此外手機號碼有連字符-登錄,我也想刪除它。

例如:

0300-123766, 0312-8789709 

我所要的輸出是:

030

我的代碼被一個以上的移動電話號碼工作正常,但存在這樣的列有可能只有一個手機號碼 。

我試過下面的代碼:

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

但這種字符串時有一個逗號唯一的工作,否則它返回null。

我該如何解決這個問題?

請幫助

+0

的可能的複製http://stackoverflow.com/questions/17421448/query-to-remove-all-characters-after-last-comma-in-string –

+0

沒有這是這個問題,因爲不同在這裏,我要求檢查字符串是否包含逗號,如果它沒有逗號,它將不起作用 –

回答

3

可以使用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

感謝它爲我工作 –

0

這個技巧將使您的查詢工作:mobile_tel || ','


SELECT 
    mobile_tel, 
    replace(substr(mobile_tel, 1, instr(mobile_tel || ',' , ',') -1), '-', '') 
FROM tbl; 
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 
相關問題