REGEXP_REPLACE с DISTINCT

Я пытаюсь использовать отдельные с REGEXP_REPLACE, и возвращается 0 строк.

Я создал тестовую таблицу в MySQLP v8.0.

   CREATE TABLE phone(
   id serial primary key,
   phone_number char(25));

   INSERT INTO phone (phone_number)
   VALUES ('(423) 330-9999');

   INSERT INTO phone (phone_number)
   VALUES ('(423)3309999');

   INSERT INTO phone (phone_number)
   VALUES ('423-330-1111)');

   INSERT INTO phone (phone_number)
   VALUES ('1-423-330-6666');

   INSERT INTO phone (phone_number)
   VALUES ('1A423*330*1111');

   INSERT INTO phone (phone_number)
   VALUES ('5553301111');

-- Потом

select 
   REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm') as clean_phone
from phone

--- работает нормально -> чистый_телефон 4233309999 4233309999 4233301111 14233306666 14233301111 5553301111

--- считать

select 
   count(REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm')) as 
   clean_phone
from phone

--- работает нормально -> чистый_телефон 6

-- отдельный clean_phone

select 
   distinct(REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm')) as 
   clean_phone
from phone

--- возвращает пусто -> чистый_телефон

Я не понимаю, почему не работает различение?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
4
0
201
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Distinct - это не функция, поэтому вам не нужен отдельный(), а только отдельный

select  distinct REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm') as 
   clean_phone
from phone

.

    select distinct  clear_phone from(
    select   REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm')  clear_phone
   from phone ) t 

если ошибки все еще остаются, вы можете попробовать использовать вставку/выбор фиктивной таблицы

  insert into dummy_table(clear_phone)
  select   REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm')  
  from phone;

  select distinct clear_phone from dummy_table;

Пробовал, все равно возвращает пусто. Используя это для тестирования db-fiddle.com db:MySSQL v8.0 Это прекрасно работает, выберите REGEXP_REPLACE(phone_number, '[^0-9]', '',1, 0, 'm') как clean_phone с телефона Добавление отдельного, как вы предложили еще не возвращает строк.

MarcCharbo 03.02.2019 08:32

попробуйте не использовать db-fiddle .. это может быть ошибкой для этого инструмента .. я также добавил тест, основанный на выборе, отличном от подвыборки .. и последний тест на основе вставки/выбора в фиктивной таблице ..

ScaisEdge 03.02.2019 08:53

я начал подозревать ошибку с db-fiddle! Спасибо за вашу помощь.

MarcCharbo 03.02.2019 09:09

Другие вопросы по теме