在Azure Data Factory中如何合并日期与时间列?
解决ADF中日期列与特殊时间列合并问题
针对你遇到的问题,核心是处理TimeColumn的特殊格式(基于1899-12-31的时间字符串),下面提供两种可行的ADF表达式方案:
方案一:直接拼接日期与时间字符串
这种方法更直观,提取TimeColumn中的时间部分后和DateColumn拼接,再转换为完整的日期时间类型:
parseDateTime(concat(string(DateColumn), ' ', substring(TimeColumn, 11, 8)))
- 步骤说明:
string(DateColumn):将日期类型的DateColumn转为字符串(如2022-01-01)substring(TimeColumn, 11, 8):从TimeColumn中截取第11位开始的8个字符,提取出时间部分(如05:59:59)concat(...):拼接日期和时间字符串(如2022-01-01 05:59:59)parseDateTime(...):将拼接后的字符串转换为ADF的日期时间类型
方案二:沿用数值相加逻辑(适配ADF函数)
如果你想保留旧场景中"转数值相加"的思路,可以通过计算时间差实现:
fromDays(toNumber(DateColumn) + (toNumber(parseDateTime(TimeColumn)) - toNumber(parseDateTime('1899-12-31T00:00:00.000Z')))/86400000)
- 步骤说明:
parseDateTime(TimeColumn):将时间字符串转为ADF日期时间类型- 计算与
1899-12-31T00:00:00.000Z的毫秒差,除以86400000(一天的毫秒数)得到时间对应的小数天数(如0.2499884259) toNumber(DateColumn):将日期类型转为Excel风格的数值天数(如2022-01-01对应44562)- 相加后用
fromDays()转换为完整的日期时间类型
注意事项
- 确保
DateColumn是ADF识别的日期类型,TimeColumn格式固定为1899-12-31Txx:xx:xx.000Z,否则会返回空值 - 如果存在异常数据,可搭配
coalesce()函数设置默认值,例如:coalesce(parseDateTime(concat(string(DateColumn), ' ', substring(TimeColumn, 11, 8))), currentTimestamp())
内容的提问来源于stack exchange,提问作者lsp_4
相关产品推荐
相关产品推荐

