2016-12-01 3 views
1

Я получаю мобильный номер сотрудника из таблицы.Удалить все символы из строки после комы, если существует запятая

Проблема в том, что в одном столбце, разделенном запятой, сохраняется одно или несколько номеров, и я хочу получить только первый номер мобильного телефона.

Также номер мобильного телефона имеет дефис - знак, я также хочу его удалить.

Например:

0300-123766, 0312-8789709 

Я хочу выход быть:

030

Мой код работает отлично для более чем одного номера мобильного телефона, но есть вероятность того, что столбец имеет только один мобильный номер .

Я попытался следующий код:

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

, но это работает только, когда строка имеет запятую, в противном случае это возвращение нуль.

Как я могу это решить?

Просьба помочь

+0

Возможный дубликат http://stackoverflow.com/questions/17421448/query-to-remove-all-characters-after-last-comma-in-string –

+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 
+0

спасибо, что это сработало для меня –

0

Этот трюк сделает вашу работу запроса: mobile_tel || ','


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

Попробуйте использовать этот запрос, я уверен, что он получит результат, как вы ожидаете -

I использовали имя таблицы - номера Имена колонок - 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 
Смежные вопросы