SQL Выберите СЛУЧАЙ, КОГДА — Как удалить форматирование из телефонных номеров

#java #mysql #eclipse

#java #mysql #eclipse

Вопрос:

У меня есть оператор SQL Select, который создает таблицу из нескольких полей. Я использую СЛУЧАЙ / КОГДА для изменения некоторых значений, но я застрял на том, как форматировать результаты.

 SELECT DISTINCT field1, field2, field3, field4,
CASE meta_value WHEN 'male' then 'M' WHEN 'female' THEN 'F' etc.
  

Возвращаемые телефонные номера могут содержать другие символы, которые я хотел бы удалить, т.е.:

 (404) 202-2039
404-202-2039
1-404-202-2039
  

Я хотел бы возвращать только числа без пробелов или других символов, дефисов, круглых скобок и т. Д:

 4042022039
  

Есть идеи о том, как лучше всего это сделать?

Комментарии:

1. Пожалуйста, укажите в своем вопросе базу данных (и версию), которую вы используете: mysql, oracle, sqlserver …? Строковые функции сильно зависят от базы данных.

2. Нет для международных номеров 44 (0)123 456 789 ?

3. Вам понадобится REPLACE() функция для преобразования ненужных символов в пустые строки. Если ваш компонент database Engine поддерживает REPLACE_REGEX() такую функциональность, вы сможете избавиться от всех ненужных символов за один вызов.

4. Кстати, я использую MySQL.

Ответ №1:

Если вы используете MySQL 8.0, вы можете использовать regexp_replace() :

 regexp_replace(phone_number, '[^0-9]', '') clean_phone_number
  

Комментарии:

1. @DavidS.: select field1, field2, regexp_replace(phone_number, '[^0-9]', '') clean_phone_number, case meta_value when ... then ... end from ...

2. Похоже, я застрял на MySQL 5.7, благодаря моему хостинг-провайдеру. Я не вижу, где реализовано или поддерживается REGEXP_REPLACE. Большое спасибо, ребята!