2017-09-25 98 views
0

我有一个Teradata表,其中列中的值是整数,我必须将其转换为HOUR(2)到MINUTE。Teradata:将间隔时间(2)转换为分钟时出错

我曾尝试下面的语句,但像间隔字段溢出得到错误

CAST(CAST(col1 AS DECIMAL(18,0)) * INTERVAL '0000:01' MINUTE TO SECOND AS INTERVAL HOUR(2) TO MINUTE) from table1 

col1中包含像5192或8734等

+0

请分享'col1'的样本值。 – zarruq

+0

这两个值都在我的最后转换得很好。即在'BTET'中分别以'5192'和'8734'为'1:26'和'2:25',以及在'sqla'和'bteq'中以'ANSI'模式。请分享'col1'的最大值' – zarruq

回答

0

整数值根据Teradata的documentation

INTERVAL HOUR TO MINUTE的值范围如下。

Type and Precision   | Minimum Value | Maximum Value 
----------------------------------------------------------------- 
INTERVAL HOUR(1) TO MINUTE  -'9:59'    '9:59' 
INTERVAL HOUR(2) TO MINUTE  -'99:59'    '99:59' 
INTERVAL HOUR(3) TO MINUTE  -'999:59'   '999:59' 
INTERVAL HOUR(4) TO MINUTE  -'9999:59'   '9999:59' 

对于问题共享的采样数据,输出值处于的INTERVAL HOUR(2) TO MINUTE范围,如下所示。

SELECT CAST(CAST(5192 AS DECIMAL(18,0)) * INTERVAL '0000:01' MINUTE TO SECOND AS INTERVAL HOUR(2) TO MINUTE) AS Value1, 
     CAST(CAST(8734 AS DECIMAL(18,0)) * INTERVAL '0000:01' MINUTE TO SECOND AS INTERVAL HOUR(2) TO MINUTE) AS Value2; 

结果:

Value1 | Value2 
-------------- 
1:26 2:25 

看来,一些转换后值都超过在这种情况下,你必须使用从上面的第三选项99:59

对于给定的查询和样本数据,如果任何值比359999时,就会失败,错误

间隔字段溢出

希望这将有助于: - )

+0

最大值是359999,现在是35999.我认为这只是你的错误。 –

+0

是的。感谢您指出。让我更新:-) – zarruq

相关问题