2

何万ものVIN番号のテーブルがあります。それらの多くはこの線に沿って見えます:
6MMTL#A423T ######
WVWZZZ3BZ1?######
MPATFS27H ?? ######
SCA2D680?7UH #####
SAJAC871?68H06 ###



#は数字を表し、?は 手紙(AZ)。

次を検索したい:6MMTL8A423T000000。

私は論理を理解するのに苦労しています。関数を使用する必要がありますか?mysql regexを使用する必要がありますか?

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 に答える