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
相关产品推荐
相关产品推荐

