我有一张包含数万个VIN号码的表格。他们中的许多人都看起来像这样:
6MMTL#A423T ######
WVWZZZ3BZ1?######
MPATFS27H ?? ######
SCA2D680?7UH #####
SAJAC871?68H06 ###
#代表一个数字和?一封信(A-Z)。
我想搜索以下内容:6MMTL8A423T000000。
我正在努力找出逻辑。我应该使用功能吗?我应该使用mysql正则表达式吗?
答案 0 :(得分: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######