如何在KSQLDB中解析SQL Server CDC Debezium同步的整数格式日期
问题根因
你转换返回null的核心原因是日期格式串使用错误:
- 你截取的
210813是无分隔符的6位日期,你使用的yy-mm-dd格式串包含短横线分隔符,与实际内容不匹配 - ksqlDB的日期格式规则中,小写
mm代表分钟,代表月份需要使用大写MM
另外parse_date、format_date为ksqlDB 0.18及以上版本新增的函数,低版本环境无法识别,使用内置的STRINGTODATE即可满足需求。
可行转换方案
你可以直接使用修正后的格式串完成转换:
SELECT STRINGTODATE(SUBSTRING(CAST(df AS STRING), 2), 'yyMMdd') FROM datcon EMIT CHANGES;
如果需要输出完整的TIMESTAMP格式(和SQL Server返回的2021-08-13 00:00:00.000格式对齐),可以额外加一层类型转换:
SELECT CAST(STRINGTODATE(SUBSTRING(CAST(df AS STRING), 2), 'yyMMdd') AS TIMESTAMP) FROM datcon EMIT CHANGES;
如果你的环境默认解析两位年份时会识别为19xx年,可以手动拼接20前缀明确指定世纪:
SELECT STRINGTODATE(CONCAT('20', SUBSTRING(CAST(df AS STRING), 2)), 'yyyyMMdd') FROM datcon EMIT CHANGES;
内容的提问来源于stack exchange,提问作者Binvij
相关产品推荐
相关产品推荐

