2013-10-04 33 views
0

我是一種尷尬的搜索和替換情況。我正在爲我的僱主開發一個新的數據庫,現在正在將舊數據導入新的MySQL數據庫。我處在十字路口的問題是,舊數據庫是一個使用.dbf文件的PC-File名稱的LEGACY數據庫,所以我找到了一個dbf查看器,它允許我將信息導出到.csv文件中,但是,特別是一個文件具有超過5000個具有錯誤世紀日期的數據記錄......而不是顯示2012年12月28日 - 它將顯示12/28/1998。我搜查了一遍,並試圖找到一種方法來解析日期信息「01/01/1900 - 01/01/1914」之間的日期信息,並用「20.」代替「19」。我無法找到一個成功的解決方案無濟於事。如何解析和替換大csv文件中錯誤的世紀日期值

我希望我的問題是明確的足夠....

我打開與Excel,C#,vb.net,和MySQL的解決方案;任何意見或建議將非常感激。

這裏是我的.csv文件樣本:

"CUSTOMER","ORDER_DATE" 

    670,"4/18/1913" 
    670,"6/25/1913" 
    670,"6/25/1913" 
    667,"9/18/1912" 
    665,"9/14/1912" 
    664,"12/8/1920" 
    664,"12/8/1920" 
    658,"9/23/1911" 
    658,"2/6/1912" 
    655,"5/11/1911" 
    651,"12/10/1910" 
    651,"12/10/1910" 
    651,"12/14/1910" 
    648,"6/2/1910" 
    648,"6/2/1910" 
    648,"6/2/1910" 
    648,"6/2/1910" 

感謝您的任何意見或建議傢伙。

+3

這是你的問題,你說的「而不是顯示2012年12月28日 - 它會顯示12/28/1998」的錯字? – JLe

+0

你是否想'用「20.」代替「19」,如果是的話,你可以直接穿過並添加100ys。但是在那種情況下'12/28/1998'會變成'12/28/2098' ...... LIST中的那些看起來好像只需要添加100就可以了,但是你的描述是不可靠的。 – Plutonix

+0

你只是想找一個一次性的解決方案來做一個搜索並替換這個CSV文件?或者你正在尋找一種方法來自動化一些定期重複的過程? –

回答

1

如果你在一個數據庫中得到它運行下面的SQL

MySQL的解決方案:

update myTable 
set ORDER_DATE = DATE_ADD(ORDER_DATE, INTERVAL 100 YEAR) 
where ORDER_DATE between '1900-01-01' and '1914-01-01'; /* Change this cutoff date range as appropriate */ 

無論技術,您使用的邏輯是相同的;選擇日期錯誤的所有記錄,然後通過添加100年進行更正。

Excel的解決辦法是:

=IF(AND(A1>=DATE(1900,1,1),A1<=DATE(1914,1,1)),DATE(YEAR(A1)+100,MONTH(A1),DAY(A1)),A1) 

其中A列中包含您的日期值。

+1

太棒了!謝謝!我會給那一槍! – user2847551

0

您應該能夠以任何方式解析日期,檢查它們是否在您指定的1900-1914範圍內,並將「19」替換爲「20」。下面就來處理解析以及隨後替換正則表達式的一種方式:

string brokenDate = "648,\"12/10/1912\""; 
System.Text.RegularExpressions.Match m = System.Text.RegularExpressions.Regex.Match(brokenDate, @"(\d{1,2}/\d{1,2}/)19(?=(0[0-9]|1[0-4]))"); 
string fixedDate = m.Groups[1].Value + "20" + m.Groups[2].Value; 

你也可以改變正則表達式,如果你想返回整條生產線,而不只是固定的日期,因爲我已經做到了。或者像其他人所建議的那樣,應該可以稍微修改一下,以便一次性修復整個文件。