teradata:将 smallint 转换为时间

teradata: convert smallint to time

好的,我看到了 并尝试了建议的内容,但这似乎对我不起作用。感谢帮助!谢谢!

以下是各个列的数据类型:

column_names: col_dt [DATE]col_tm [SMALLINT]

数据样本:

col_dt: 2017-08-10 col_tm: 1,630

这是我的代码片段。我正在尝试使用以下代码将两列合并为一列:

(trim(col_dt) || ' ' || right('0' + convert(varchar(10), col_tm/100),2) + ':' + right('0' + convert(varchar(10),col_tm%100),2)) as col_dtmstp,

在您提到的 post 中,他们使用的 right 函数不是 teradata sql 中的内置函数。您可以改用 CAST 函数。

下面的查询将生成数据类型为 TIMESTAMP 的所需结果。

SELECT Cast(Trim('2017-08-10' 
          || ' ' 
          ||Trim(Cast(1630 / 100 AS CHAR(10))) 
          || ':' 
          || Trim(Cast(1630 MOD 100 AS CHAR(10))) 
          || ':00') AS TIMESTAMP(0) Format 'yyyy-mm-ddBhh:mi:ss');

它已成功通过 Teradata SQL Assistant 和 bteq 测试。您可以使用 type[expression] 函数确认其数据类型。

您可以将 col_dt 转换为时间戳,这会导致午夜,然后将 col_tm 转换为 tring,然后再转换为 interval:

Cast(col_dt AS TIMESTAMP(0)) 
+ Cast(Trim(col_tm (Format '99:99')) AS INTERVAL HOUR TO MINUTE)