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

Teradata中如何将DA类型日期与I2类型时间合并为时间戳

解决Teradata中DA日期列与I2时间列合并为TIMESTAMP的无效格式问题

方案一:使用日期+时间间隔(推荐,避免字符串格式问题)

直接通过日期类型与时间间隔运算生成TIMESTAMP,无需字符串拼接,彻底规避格式不匹配的错误:

SELECT
  t108.Evnt_Date + 
    INTERVAL (CASE WHEN t108.Evnt_Time < 100 THEN t108.Evnt_Time ELSE t108.Evnt_Time / 100 END) HOUR + 
    INTERVAL (CASE WHEN t108.Evnt_Time < 100 THEN 0 ELSE t108.Evnt_Time MOD 100 END) MINUTE
  AS Evnt_Tmst
FROM your_table t108;

逻辑说明:

  • 针对时间列的两种值格式(两位小时数/四位时分值),通过CASE判断拆分出小时和分钟
  • 将小时、分钟转换为INTERVAL类型后,直接与DA类型的日期列相加,自动生成合法的TIMESTAMP

方案二:修正字符串拼接格式

如果坚持用字符串拼接的方式,需要先将时间值补全为四位的HHMI格式,确保拼接后的字符串符合TIMESTAMP的解析要求:

SELECT
  CAST(
    TO_CHAR(t108.Evnt_Date, 'YYYY-MM-DD') || ' ' || 
    RPAD(CAST(t108.Evnt_Time AS CHAR(4)), 4, '0')
  AS TIMESTAMP(0) FORMAT 'YYYY-MM-DD HH24MI') AS Evnt_Tmst
FROM your_table t108;

逻辑说明:

  • 用TO_CHAR将DA类型的日期转为标准字符串格式
  • 用RPAD把时间值补全为四位(如19→1900,2000保持原样),拼接后字符串符合YYYY-MM-DD HH24MI的解析格式

原SQL报错原因

你之前的SQL触发无效时间戳错误,核心问题是:

  • 当时间列是19这类两位值时,拼接后字符串为YYYY-MM-DD 19,但指定的FORMAT 'YYYYMMDDHHMI'要求必须是四位时分值,长度不匹配导致解析失败
  • DA类型的Evnt_Date本身就是日期类型,无需再次CAST AS DATE,多此一举且可能引入格式冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:50:20