You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 22:57:00