2017-08-11 54 views
-1

好的,我看到了这个post,并尝试了所建议的内容,但这似乎不适用于我。感谢帮助!谢谢!teradata:将smallint转换为时间

以下是各列数据类型:

: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,

+0

语法错误:预期的东西之间的“||”和'right'关键字 –

回答

1

你可以施放col_dt的时间戳,导致半夜,然后双击投col_tm到特林第一,然后到interval

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

谢谢@dnoeth。你提供的解决方案工作。然而,我在问题(我的道歉)中错误地提到col_date格式有'YYYY-MM-DD';取而代之的是'dd/mm/yyyy'。我所有的其他列都是'YYYY-MM-DD'格式,我更喜欢col_date以相同的方式显示。 –

+0

@ k.learn:当'col_dt'是'date'时,不需要做任何事情,因为时间戳的默认格式已经是'yyyy-mm-dd hh:mi:ss' – dnoeth

0

在你提到的职位,他们所使用的是没有内置功能的Teradata SQL right功能。您可以使用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]函数确认其数据类型。