2011-11-08 73 views
0

我當前使用的Web應用程序有一個文件導入邏輯。邏輯從模式中查找包含最少字符的匹配記錄 - Oracle/Java

1>從文件中讀取記錄[EXCEL或TXT],
2>示出的進口[新記錄被標記爲新如果在數據庫中不存在,它們中的所有記錄的不可編輯格現有記錄標記爲更新]和
3>轉儲數據庫中的記錄。

包含與文件中以下格式接觸文件(反映在與主鍵First_Name, Last_Name數據庫中的列):

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

我們正在運行到的問題是,當存在不同的值的在文件中輸入相同的實體。例如,有人可能會爲紐約輸入紐約,而其他人會輸入紐約。同樣適用於名字或姓氏前。約翰邁爾斯和約翰邁爾提到同一個人,但由於記錄不完全匹配,它插入記錄,而不是重新使用它的更新。

例如,從文件記錄(請注意名稱和地址的使用,純屬巧合:)):

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

,並在數據庫中的記錄:

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

系統應該檢測到該文件中的記錄爲現有記錄[因爲姓氏爲MyersMyer,因爲名字完全匹配]並對地址進行更新,而是插入一個新值。

我該如何處理這個問題,我希望找到所有可以在數據庫中的現有記錄上執行匹配的記錄?

回答

0

一個解決方案,我能想到的Oracle正在使用正則表達式來實現高達一定程度的功能性。

對於每一列,我都會在字符串長度的一半處生成Regex表達式。例如,對於名爲「梅爾」的文件中,並「邁爾斯」在數據庫中,下面的查詢將工作:

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

我認爲這是一個部分解決方案,因爲我會分析輸入的字符串和啓動將none or only one運算符從一半長度附加到字符串末尾,並希望輸入字符串不會混亂。

希望從這個「解決方案」的SO上找到其他人的反饋意見。

0

這是一個非常難以解決的問題,如果您知道數據的來源,那麼您可以嘗試手動糾正數據輸入的不同組合。

否則

你可以嘗試的語音數據清洗液