我正在尝试阅读具有日期列的excel工作表。由于第一行为空,SSIS似乎将列视为数字列。
以下是Excel专栏:
当我在ssis Excel源代码编辑器中预览时,它会显示:
您可以看到我的TermDate列显示为数字而不是日期。非常感谢任何帮助
答案 0 :(得分:3)
欢迎使用Excel存储日期。 http://www.debugging.com/bug/19252我最终在C#app中使用此功能从数字日期切换到日期时间日期。
/// <summary>
/// Seriously? For the loss
/// <see cref="http://www.debugging.com/bug/19252"></see>
/// </summary>
/// <param name="excelDate">Number of days since 1900-01-01</param>
/// <returns>The converted days to date</returns>
public static DateTime ConvertXlsdtToDateTime(int excelDate)
{
DateTime dt = new DateTime(1899, 12, 31);
// adjust for 29 Feb 1900 which Excel considers a valid date
if (excelDate >= 60)
{
excelDate--;
}
return dt.AddDays(excelDate);
}
您可以在脚本转换中使用该公式来生成DateTime值,也可以使用丑陋的表达式来执行相同的操作。已经很晚了,所以我假设你的日期是在假的1900-02-29之后,如上所述
DATEADD("day",TermDate - 1,(DT_DATE)"1899-12-31")
下面是一个使用输入数据的示例,派生列中的上述表达式生成ExcelDate
。我带着TermDateAsDate
确保按预期匹配日期。