2

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



# 代表一个数字,而 ? 一封信(AZ)。

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

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

4

1 回答 1

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

于 2012-11-17T17:21:52.730 回答