Mysql поиск записей, содержащих подстановочные знаки

У меня есть таблица с десятками тысяч номеров VIN. Многие из них выглядят так:
6MMTL # A423T ######
WVWZZZ3BZ1? ######
MPATFS27H?? ######
SCA2D680? 7UH #####
SAJAC871? 68H06 ###



Знак # представляет собой цифру, а символ? письмо (AZ).

Я хочу найти следующее: 6MMTL8A423T000000.

Я изо всех сил пытаюсь выработать логику. Должен ли я использовать функцию? Должен ли я использовать MySQL регулярное выражение?

1 ответ

Решение

Соответствие регулярному выражению было бы хорошим способом решения этой проблемы. Что вам нужно сделать, это преобразовать vin-выражения в допустимые регулярные выражения, которые представляют указанную вами логику. Вот простой способ сделать это:

replace(replace(vin,'#','[0-9]'),'?','[A-Z]')

Это будет конвертировать 6MMTL#A423T###### в 6MMTL[0-9]A423T[0-9][0-9][0-9][0-9][0-9][0-9], Теперь, используя этот преобразованный формат, выполните запрос на совпадение с регулярным выражением:

select vin
from vins
where '6MMTL8A423T000000' regexp replace(replace(vin,'#','[0-9]'),'?','[A-Z]')

Пример вывода: 6MMTL#A423T######

Демо: http://www.sqlfiddle.com/

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