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

如何将Teradata的x_date/100+190000日期运算转换为BigQuery语法

Teradata 原运算逻辑拆解

Teradata 中 DATE 类型参与算术运算时,会先隐式转换为整数,转换规则为 (年份 - 1900) * 10000 + 月份 * 100 + 当日号,例如日期2022-06-06会被转为整数1220606。
对该整数执行/100运算时,Teradata 采用向下截断的整数除法规则,直接舍弃小数部分,相当于抹掉最后两位代表“当日号”的数值,得到(年份 - 1900)*100 + 月份格式的整数,例如1220606 / 100 = 12206。
在此结果上加190000后,得到的整数格式为年份*100 + 月份,例如12206 + 190000 = 202206。Teradata 将该整数隐式转回 DATE 类型时,会自动补全日位为当月1日,最终返回传入日期所属月份的第一天。
用你提供的示例数据验证,原运算返回结果完全匹配以下对应关系:

  • 输入2022-06-06 → 输出2022-06-01
  • 输入2020-03-06 → 输出2020-03-01
  • 输入2019-09-01 → 输出2019-09-01
  • 输入2028-05-06 → 输出2028-05-01
BigQuery 等价实现

BigQuery 无需模拟整数转换逻辑,直接使用原生日期截断函数即可100%对齐Teradata执行结果,最终返回DATE类型,代码如下:

SELECT DATE_TRUNC(x_date, MONTH) AS x_date
FROM x_table

如果需要通过整数运算逻辑交叉验证等价性,可以使用以下写法,返回结果和上述写法完全一致,但执行效率更低,不推荐生产环境使用:

SELECT PARSE_DATE(
          '%Y%m%d',
          CONCAT(CAST(EXTRACT(YEAR FROM x_date)*100 + EXTRACT(MONTH FROM x_date) AS STRING), '01')
       ) AS x_date
FROM x_table

注意:BigQuery 不支持DATE类型直接参与算术乘除运算,因此整数模拟写法需要先单独提取年、月字段拼接,和Teradata隐式转换的计算规则完全对齐。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:49:18