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

求助:BigQuery中基于值的STRING转DATE日期格式化问题

BigQuery字符串转日期的多格式处理方案

你的问题出在只使用了一种日期解析格式:原语句里不管输入是哪种格式,都用%m/%d/%Y去解析,当遇到YYYY-MM-DD格式的字符串时,不符合该解析规则,自然会报错。

按照你的需求,我们需要先判断输入字符串的格式,再选择对应的解析方式,同时处理NULL和空字符串的情况,最终SQL语句如下:

SELECT
  input_date,
  CASE
    -- 处理NULL值和空字符串
    WHEN input_date IS NULL OR input_date = '' THEN NULL
    -- 匹配YYYY-MM-DD格式,直接解析为DATE
    WHEN REGEXP_CONTAINS(input_date, r'^\d{4}-\d{2}-\d{2}$') THEN PARSE_DATE('%Y-%m-%d', input_date)
    -- 处理MM/DD/YYYY格式,转换为YYYY-MM-DD的DATE类型
    ELSE PARSE_DATE('%m/%d/%Y', input_date)
  END AS output_date
FROM mytable

代码说明:

  • NULL和空串处理:优先判断input_date IS NULL或者空字符串,直接返回NULL,符合你的规则1和2。
  • YYYY-MM-DD格式匹配:用正则表达式r'^\d{4}-\d{2}-\d{2}$'匹配年-月-日格式的字符串,然后用%Y-%m-%d格式解析,保证这类日期直接转换。
  • MM/DD/YYYY格式转换:剩下的符合该格式的字符串,用%m/%d/%Y解析,BigQuery会自动将其转换为标准的DATE类型(存储为YYYY-MM-DD格式)。

如果需要兼容更多边缘情况(比如格式不规范的日期),可以在ELSE分支里添加错误处理(比如用SAFE.PARSE_DATE替代PARSE_DATE,解析失败时返回NULL),修改后的语句如下:

SELECT
  input_date,
  CASE
    WHEN input_date IS NULL OR input_date = '' THEN NULL
    WHEN REGEXP_CONTAINS(input_date, r'^\d{4}-\d{2}-\d{2}$') THEN SAFE.PARSE_DATE('%Y-%m-%d', input_date)
    ELSE SAFE.PARSE_DATE('%m/%d/%Y', input_date)
  END AS output_date
FROM mytable

内容的提问来源于stack exchange,提问作者kshaikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:30:57