mysql запрос, чтобы найти все строки, где «+ 1x» не равно «x», игнорируя +1 - PullRequest
0 голосов
/ 23 января 2020

Необходимо найти все строки, где «+ 1x» не равно «x», игнорируя + 1.

Например, столбец с именем number содержит «+18330001111» и столбец с именем phone содержит '8330001111' в той же строке. Запрос НЕ ДОЛЖЕН возвращать эту строку, поскольку символы одинаковы, игнорируя '+1'.

Если число содержит '+183330001212' и phone содержит '83330001313' запрос СЛЕДУЕТ возвращать эту строку, поскольку символы отличаются, игнорируя '+1'.

1 Ответ

0 голосов
/ 23 января 2020

Вы можете использовать replace для нормализации чисел на лету.

select *
from mytable
where replace(phone, '+1', '') != replace(number, '+1', '')

Проблема здесь в том, что replace('+1', phone, '') и replace('+1', number, '') не будут проиндексированы, что приведет к полное сканирование таблицы. Если вам нужно сделать это только один раз, это может быть хорошо. Если вы делаете это часто, это плохо, и вместо этого вам следует нормализовать данные.


Нормализация ваших данных устраняет подобные двусмысленности и подводные камни. Это упрощает и ускоряет ваши запросы, поскольку они в большей степени могут использовать преимущества индексации.

В этом случае либо добавьте, либо удалите (возможно, добавьте) код страны из своих телефонных номеров. Выполните нормализацию как в сохраненных данных, так и во всех вводимых данных.

update mytable
set phone = concat('+1', phone)
where phone not like '+%';

update mytable
set number = concat('+1', number)
where number not like '+%';

Теперь проверка тривиальна.

select *
from mytable
where phone != number;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...