将纪元时间值转换为teradata中的时间戳(6)

时间:2012-05-14 21:45:13

标签: sql teradata

如何将纪元时间值转换为teradata中的时间戳(6)?

让我们以1336987231051作为示例纪元时间(注意这是以毫秒为单位,其中纪元时间以秒为单位),我做了类似的事情

// miliseconds epoch time 
select cast(1336987231051 as timestamp(6))

// seconds epoch time 
select cast((1336987231051/1000) as timestamp(6))

我收到上述两个选择语句的错误消息:

[Error] Script lines: 12-12 ------------------------
[Teradata Database] [TeraJDBC 13.10.00.31] [Error 5407] [SQLState HY000] Invalid operation for DateTime or Interval. 

我在http://www.epochconverter.com/验证了1336987231051是有效的纪元时间。

teradata中正确的sql是什么?

2 个答案:

答案 0 :(得分:0)

select
    cast(cast(700101 as date) + seconds_from_epoch / 86400 as timestamp(6)) +
        (seconds_from_epoch mod 86400) * interval '00:00:01' hour to second
from my_table

答案 1 :(得分:0)

将EPOCH转换为TERADATA TIME的最简单方法。

SELECT
   1336987231051/1000 as unix_epoc_time   ,
   to_timestamp(unix_epoc_time) utc,
   cast(cast(utc as char(19))||'+00:00' as timestamp(0) with time zone) AT LOCAL    
;
  1. 如果纪元为10位数字,则不需要/1000
  2. 请记住,Unix时间是UTC。
  3. 您的系统会将这个“ utc”视为本地。因此,让我们通过添加“ +00:00”来理解它是UTC,然后使用AT LOCAL或使用这些“ America Central”,“ America Eastern”,“ America Mountain” “等等。