Spark SQL如何为日期格式添加多种分隔符支持
Spark SQL多分隔符日期校验实现方案
实现思路
- 先对原始dt字段做清洗:通过正则匹配替换掉所有非数字字符,得到纯数字组成的临时字符串
- 校验纯数字字符串长度是否为8位,非8位直接判定为格式不合法
- 对符合长度要求的纯数字串,沿用原有逻辑校验是否为合法的
yyyyMMdd或MMddyyyy格式日期 - 校验通过返回原始dt值,否则返回空值和对应错误提示
优化后代码(冗余度低版本,推荐使用)
spark.sql(""" WITH dt_clean AS ( SELECT dt, REGEXP_REPLACE(dt, '[^0-9]', '') AS dt_digits FROM input ) SELECT CASE WHEN LENGTH(dt_digits) = 8 AND ( FROM_UNIXTIME(UNIX_TIMESTAMP(dt_digits, 'yyyyMMdd'), 'yyyyMMdd') = dt_digits OR FROM_UNIXTIME(UNIX_TIMESTAMP(dt_digits, 'MMddyyyy'), 'MMddyyyy') = dt_digits ) THEN dt ELSE '' END AS dt, CASE WHEN LENGTH(dt_digits) = 8 AND ( FROM_UNIXTIME(UNIX_TIMESTAMP(dt_digits, 'yyyyMMdd'), 'yyyyMMdd') = dt_digits OR FROM_UNIXTIME(UNIX_TIMESTAMP(dt_digits, 'MMddyyyy'), 'MMddyyyy') = dt_digits ) THEN 'Y' ELSE 'dt: 需符合yyyyMMdd或MMddyyyy格式,支持的分隔符包括无分隔、点、逗号、斜杠、短横线' END AS dt_flag FROM dt_clean """).show(false)
支持的合法格式示例
- 无分隔:
20240520、05202024 - 短横线分隔:
2024-05-20、05-20-2024 - 斜杠分隔:
2024/05/20、05/20/2024 - 点号分隔:
2024.05.20、05.20.2024 - 逗号分隔:
2024,05,20、05,20,2024 - 混合分隔:
2024-05/20、05.20,2024(只要去除非数字后符合8位合法日期规则即可识别)
内容的提问来源于stack exchange,提问作者Only developer
相关产品推荐
相关产品推荐

