MySQL выбирает строки, где значение ячейки равно числу, где отбрасываются нецифровые символы - PullRequest
0 голосов
/ 28 сентября 2019

Проблема : некоторые артикулы выглядят так: «67062-4D» или «MOD602-04-N».Поэтому задача состоит в том, чтобы найти sku по его цифрам, когда пользователь использует поиск, например, «67062-4D» по «670624» и «MOD123-45-N» по «12345». Решение : мне удалось решить эту проблему, повторив [^ 0-9] * 1 в php, чтобы создать регулярное выражение (php и mysql используется), но очень хочется узнать, где универсальный или болееестественное решение.В противном случае просто опубликовать это решение.В этом примере обнаруживается обновление «MOD123-45-N»

SELECT product_id WHERE sku REGEXP '^[^0-9]*1[^0-9]*2[^0-9]*3[^0-9]*4[^0-9]*5[^0-9]*$'

: версия 10.1.40-MariaDB

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

С regexp_replace():

select product_id 
from tablename
where regexp_replace(sku, '\\D', '') LIKE concat('%', search, '%')

или чтобы найти точное совпадение:

select product_id 
from tablename
where regexp_replace(sku, '\\D', '') = search
0 голосов
/ 28 сентября 2019

Вы можете использовать REGEXP_REPLACE, чтобы удалить все нецифровые символы из строки, а затем сравнить его с введенным номером, например,

SELECT product_id WHERE REGEXP_REPLACE(sku, '[^0-9]', '') = '12345'

Демонстрация на dbfiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...