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)
好的,我看到了
以下是各个列的数据类型:
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)