Mysql搜索包含通配符的记录

时间:2012-11-16 22:40:42

标签: mysql vin

我有一张包含数万个VIN号码的表格。他们中的许多人都看起来像这样: 6MMTL#A423T ######
WVWZZZ3BZ1?######
MPATFS27H ?? ######
SCA2D680?7UH #####
SAJAC871?68H06 ###



#代表一个数字和?一封信(A-Z)。

我想搜索以下内容:6MMTL8A423T000000。

我正在努力找出逻辑。我应该使用功能吗?我应该使用mysql正则表达式吗?

1 个答案:

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

演示:http://www.sqlfiddle.com/#!2/ee4de/4