DB2时间戳UTC格式化问题解决(适配Azure Data Factory场景)
DB2时间格式转换及UTC适配解决方案
错误原因
你碰到的SQLCODE=-20447错误,是因为TO_CHAR的格式字符串里用双引号包裹了"T",DB2不支持这种写法,得用单引号转义字面量字符。另外直接拼接+01:00没法保证最终输出UTC时间,必须先做时区转换。
具体解决步骤
修正格式字符串语法:把格式里的"T"用两个单引号转义,避免语法报错:
TO_CHAR(D.STANTS, 'YYYY-MM-DD''T''HH24:MI:SS.FF3')转UTC并格式化:如果原时间
D.STANTS属于+01:00时区,先标记时区再提取UTC时间后格式化,用DB2的SYS_EXTRACT_UTC函数更稳妥:-- 给原时间标记时区,提取UTC后格式化 TO_CHAR(SYS_EXTRACT_UTC(TIMESTAMP_TZ(D.STANTS, '+01:00')), 'YYYY-MM-DD''T''HH24:MI:SS.FF3''Z''') AS time_stamp要是原时间本身已经带时区信息,直接用
SYS_EXTRACT_UTC即可:TO_CHAR(SYS_EXTRACT_UTC(D.STANTS), 'YYYY-MM-DD''T''HH24:MI:SS.FF3''Z''') AS time_stamp这里的
''Z''会输出Z,代表UTC时间,完全符合ISO 8601标准,MongoDB可以直接识别。子对象字段处理:对
sentProcessedTimestamp字段套用同样逻辑,假设字段为S.SENTPROCESSEDTIMESTAMP:TO_CHAR(SYS_EXTRACT_UTC(TIMESTAMP_TZ(S.SENTPROCESSEDTIMESTAMP, '+01:00')), 'YYYY-MM-DD''T''HH24:MI:SS.FF3''Z''') AS sentProcessedTimestamp
注意事项
- 如果原时间的时区不是+01:00,记得替换成对应的偏移值(比如+02:00、-05:00等)
- 测试查询确认不再触发SQLCODE=-20447错误,且输出格式为类似
2018-04-30T04:55:47.349Z的UTC时间,确保导入MongoDB时无兼容性问题
内容的提问来源于stack exchange,提问作者JsonStatham
相关产品推荐
相关产品推荐

