我有点尴尬的搜索和替换情况。我正在为我的雇主开发一个新数据库,现在正在将旧数据导入新的MySQL数据库。我正处于十字路口的问题是,旧数据库是一个LEGACY数据库,名为PC-File,它使用.dbf文件,所以我找到了一个dbf查看器,它允许我将信息导出到.csv文件中,但是,特别是一个文件,有超过5000个数据记录与不正确的世纪日期...而不是显示12/28/2012 - 它将显示12/28/1998。我已经搜索并在互联网上试图找到一种方法来解析年份范围“01/01/1900 - 01/01/1914”之间的日期信息,并将“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"
感谢大家的任何反馈或提示。
答案 0 :(得分: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 :(得分:0)
您应该能够以任何方式解析日期,检查它们是否在您指定的1900-1914范围内,并将“19”替换为“20”。这是使用Regex处理解析和后续替换的一种方法:
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;
如果你愿意,你也可以改变正则表达式以返回整行,而不仅仅是我已经完成的固定日期。或者像其他人建议的那样,应该可以稍微修改一下,以便一次修复整个文件。