我有一张有上万个车牌号的桌子。他们中的许多人都是这样想的:
6毫升A423T######
WVWZZ3BZ1?######
MPATFS27H??######
SCA2D680?7小时#####
萨贾克871?68时06分###
代表一个数字和?一封信(a-Z)。
我想搜索以下内容:6MMTL8A423T000000。
我正在努力搞清楚逻辑。我应该使用函数吗?我应该使用mysql regex吗?

最佳答案

正则表达式匹配是解决此问题的好方法。您需要做的是将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

09-05 12:57