我正在处理SSIS ELT脚本,该脚本需要解析TSV文件中的日期,这些日期以[INTEGER].[INTEGER]
格式存储(Excel integer dates,然后是午夜后的第二个,例如,42825.94097;或自午夜起的微秒,例如,42831.1229166667)。我提出了以下方法:
派生列函数,用于将解析后的日期附加在一起,例如,
DATEADD("day",StartTime_Date,DATEADD("second",StartTime_Time,(DT_DATE)"1/1/1900"))
有没有一种更优雅的方法可以在不使用脚本组件的情况下执行此操作?
答案 0 :(得分:1)
“DT_DATE数据类型使用8字节浮点数实现。天数以整数增量表示,从1899年12月30日开始,午夜表示为时间零。小时值表示为绝对值数字的小数部分的值。但是,浮点值不能代表所有实际值;因此,DT_DATE中可以显示的日期范围有限制。“ Read more
从上面的描述中可以看出在将它们转换为8字节浮点数DT_DATE
后将它们映射到DT_R8
列时,可以隐式转换这些值。 /强>
使用派生列转换将此列转换为8字节浮点数:
(DT_R8)[dateColumn]
然后将其映射到DT_DATE
列
或投两次:
(DT_DATE)(DT_R8)[dateColumn]
<强>实验强>
我用一个DataFlow Task
DataFlow任务包含一个脚本组件(作为源),它生成一个输出行(DT_R8类型的一列),其值为42825.94097
。
脚本组件链接到派生列,该列使用以下表达式将此列转换为DT_DATE
(DT_DATE)[Column]
我得到的输出如下所示
相关答案
我有很多与这个问题相关的答案: