2012-11-16 3 views
2

수만 개의 VIN 번호가있는 테이블이 있습니다. 그들 중 많은이의 라인을 따라 볼 :
6MMTL #의 A423T의 ######
WVWZZZ3BZ1 ######
MPATFS27H? ######
SCA2D680을 7UH ###? ##
SAJAC871? 68H06 ###
와일드 카드가 포함 된 Mysql 검색 레코드



는 #는 숫자를 나타내는 상기? 편지 (A-Z).

다음을 검색하고 싶습니다. 6MMTL8A423T000000.

나는 논리를 해결하는 데 어려움을 겪고 있습니다. 함수를 사용해야합니까? mysql 정규식을 사용해야합니까?

+1

'VIN = '6MMTL8A423T000000'' 이제 정규식 검색 쿼리를 수행,이 형식을 변환 사용? – mellamokb

+0

혼란스럽게 생각합니다. 예를 들어 테이블에 실제 "6MMTL # A423T ######"및 "6MMTL # B423T ######"이 포함되어 있음을 나타냅니다. 그래서 6MMTL8A423T000000을 입력하면 "6MMTL # B423T ######"이 아닌 "6MMTL # A423T ######"와 일치해야합니다. 쿼리 결과는 "6MMTL # A423T ######"정확히 (따옴표없이) 작성해야합니다. – carbroker

+1

더 명확히하기 위해 (나는 희망한다). 각 레코드에는 차량의 제조업체 및 모델과이 제조업체/모델에 대한 VIN 번호 구성 방법을 보여주는 패턴이 포함되어 있습니다. 특정 차량에 대한 특정 VIN과 함께하고 어떤 모델/모델이 일치하는지 알고 싶습니다. – carbroker

답변

1

정규 표현식 일치는이 문제에 접근하는 좋은 방법입니다. vin 표현식을 사용자가 지정한 논리를 나타내는 유효한 정규식으로 변환해야합니다.

replace(replace(vin,'#','[0-9]'),'?','[A-Z]') 

6MMTL[0-9]A423T[0-9][0-9][0-9][0-9][0-9][0-9]6MMTL#A423T###### 변환 것 : 여기에 있다고 할 수있는 간단한 방법입니다.

select vin 
from vins 
where '6MMTL8A423T000000' regexp replace(replace(vin,'#','[0-9]'),'?','[A-Z]') 

샘플 출력 : 6MMTL#A423T######

데모 : http://www.sqlfiddle.com/#!2/ee4de/4

+0

고마워요! 매우 영리한! – carbroker

관련 문제