0

私はちょっと厄介な検索と置換の状況にいます。雇用主のために新しいデータベースを開発しており、現在、古いデータを新しい MySQL データベースにインポートしています。私が岐路に立っている問題は、古いデータベースが .dbf ファイルを使用する PC-File という名前の LEGACY データベースであったため、情報を .csv ファイルにエクスポートできる dbf ビューアーを見つけたことです。しかし、特に 1 つのファイルには、世紀の日付が正しくないデータのレコードが 5000 を超えています... 2012 年 12 月 28 日ではなく、1998 年 12 月 28 日と表示されます。「1900 年 1 月 1 日 - 1914 年 1 月 1 日」の範囲の日付情報を解析し、「19」を「20」に置き換える方法を見つけようとして、インターネットを上下に検索しました。そして、私は成功した解決策を見つけることができませんでした。

私の質問が明確であることを願っています....

私は、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"

フィードバックやヒントをありがとうございました。

4

2 に答える 2

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 には日付値が含まれます。

于 2013-10-04T18:31:37.723 に答える
0

可能な方法で日付を解析し、指定した1900年から1914年の範囲内にあるかどうかを確認し、「19」を「20」に置き換えることができるはずです。解析とその後の正規表現による置換を処理する 1 つの方法を次に示します。

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;

私が行った固定日付だけでなく、必要に応じて行全体を返すように正規表現を変更することもできます。または、他の誰かが示唆したように、ファイル全体を一度に修正するために少し変更することも可能です。

于 2013-10-04T18:34:06.037 に答える