如何在SSIS派生列中计算带时分秒日期差并返回浮点结果
SSIS派生列实现与Excel逻辑一致的日期浮点差值计算
Excel日期相减的核心逻辑是返回两个时间点间隔的天级数值:整数部分为间隔完整天数,小数部分为不足1天的时长占全天的比例,你给出的0.002777...结果对应的就是约4分钟的间隔时长,和该逻辑完全匹配。
在SSIS派生列组件中可直接通过以下表达式实现,无需额外脚本组件:
(DT_R8)DATEDIFF("ms", DT_CREATED_DATE, DT_ANSWERED_DATE) / 86400000.0
表达式逻辑说明
DATEDIFF("ms", DT_CREATED_DATE, DT_ANSWERED_DATE):先计算两个时间的间隔总毫秒数,可完整覆盖字段存储的3位毫秒精度,无精度损失- 除以
86400000.0:1天总毫秒数为246060*1000=86400000,相除后得到的就是天级浮点差值,和Excel计算结果完全一致 - 前缀
(DT_R8):将结果强制转换为8字节双精度浮点型,符合你需要的浮点返回值要求
注意事项
- 不要直接对两个
DT_DBTIMESTAMP类型字段做减法,SSIS中日期类型直接相减返回的是时间偏移结构体,不是数值类型结果 - 除数必须写为带小数位的
86400000.0,不要写整数格式的86400000,否则会触发SSIS整数除法逻辑,截断小数位 - 如果存在响应时间早于创建时间的异常数据,可加判断规避无效值,替换表达式为:
DT_ANSWERED_DATE >= DT_CREATED_DATE ? (DT_R8)DATEDIFF("ms", DT_CREATED_DATE, DT_ANSWERED_DATE) / 86400000.0 : NULL(DT_R8) - 计算前请确认两个源字段已被SSIS识别为
DT_DBTIMESTAMP类型,若为字符串类型需先做类型转换再参与计算
内容的提问来源于stack exchange,提问作者Roberta_Gomes
相关产品推荐
相关产品推荐

