2016-12-01 3 views
1

私は従業員の携帯電話番号をテーブルから取得しています。コンマが存在する場合、昏睡後に文字列からすべての文字を削除します

問題は、1つまたは複数の番号がカンマで区切られた1つの列に保存されていて、最初の携帯電話番号のみを取得したいという問題です。

また、携帯電話番号はハイフン-となっています。また、削除したいと考えています。例えば

0300-123766, 0312-8789709 

私は出力になりたい:

030

私のコードは、複数の携帯電話番号のために正常に動作しているが、列は一つだけを持っている可能性があります携帯電話番号 。

私は、次のコードを試してみた:

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

をが、文字列にカンマがある場合、これが唯一、働いていると、そうでない場合はnullを返します。

どうすればこの問題を解決できますか?

親切にあなたがこれを行うにはcase表現を使用することができます

+0

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

+0

の可能性のある重複していない、これがために、この質問は異なっていますここに私は文字列にコンマが含まれているかどうかを確認するように頼んだ。もしコンマがないなら、それは動作しないだろう。 –

答えて

3

を助けます。 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

は、このクエリを使用してみてください、私はあなたが期待しているとして、それは結果を得ると確信しています -

Iテーブル名を使用しています - 数字 カラム名 - id、phone

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