2011-11-08 2 views
0

현재 작업하고있는 웹 응용 프로그램에 파일 가져 오기 논리가 있습니다. 논리패턴에서 가장 적은 문자로 일치하는 레코드 찾기 - Oracle/Java

1>은
2>가 [가 데이터베이스에 존재하지 않는 경우 새로운 기록이 새로운으로 표시됩니다 수입 모든 레코드의 비 편집 가능한 그리드를 보여주고, [엑셀 또는 TXT] 파일에서 레코드를 읽고 기존 레코드가 Update로 표시되고
3> 데이터베이스의 레코드가 덤프됩니다.

파일의 형식을 다음과 연락처가 포함 된 파일 (기본 키 First_Name, Last_Name으로 데이터베이스의 열을 반영)

:

First_Name, Last_Name, AddressLine1, AddressLine2, City, State, Zipcode

우리가로 실행하는 문제에 다른 값이 거기에있을 때입니다 동일한 엔티티가 파일에 입력됩니다. 예를 들어 누군가 뉴욕을 뉴욕에 입력하는 반면 다른 사용자는 뉴욕에 입력 할 수 있습니다. 이름이나성에도 동일하게 적용됩니다. John Myers와 John Myer는 같은 사람을 언급하지만 레코드가 정확히 일치하지 않기 때문에 레코드를 다시 사용하지 않고 삽입하여 레코드를 업데이트합니다.

예, 파일에서 레코드 (이름과 주소 사용을 유의하시기 바랍니다 순전히 우연의 일치 :입니다) :

John, Myers, 44 Chestnut Hill, Apt 5, Indiana, Indiana, 11111

데이터베이스의 레코드 :

John, Myer, 80 Washington St, Apt 1, Chicago, IL, 3333

시스템에서 파일의 레코드를 [기존 이름이인 기존 레코드 [ 0 and Myer 그리고 첫 번째 이름이 완전히 일치하므로] Address에 대한 업데이트를 수행하지만 새로운 값을 삽입합니다.

데이터베이스의 기존 레코드와 일치하는 모든 레코드를 찾으려면 어떻게해야합니까?

답변

0

하나 개의 솔루션은 내가 어느 정도 개까지 기능을 달성하기 위해 오라클에 정규식을 사용하고 생각할 수있는 음성 데이터 정제 솔루션을 시도 할 수

.

각 열에 대해 문자열 길이의 중간에 정규 표현식을 생성합니다. 예를 들어, 이름이 파일에서 "마이어"데이터베이스에서 "마이어스"에 대해, 다음 쿼리는 작동합니다 : I는 입력 문자열과 시작을 구문 분석 때문에이 부분적인 해결책으로이 문제를 고려할 것

SELECT Last_Name from Contacts WHERE (Last_Name IS NULL OR Regexp_Like(Last_Name, '^Mye?r?$'))

none or only one 연산자를 길이의 절반에서 문자열의 끝에 추가하고 입력 문자열이 엉망이되지 않도록해야합니다.

이 "해결책"을 위해 SO에 대한 다른 의견을 찾기를 바랍니다.

0

데이터 소스를 알고 있다면 데이터 입력의 다른 조합을 수동으로 수정할 수 있습니다. 해결하는 것은 매우 어려운 문제입니다. 그렇지

당신이

관련 문제