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######