1. 程式人生 > >Trafodion 數值轉換為時間戳格式

Trafodion 數值轉換為時間戳格式

今天有人問到在Trafodion中如何將一個數值轉換為時間戳格式(timestamp),比如數值1500220712在Linux環境下代表某個具體的時間戳2017-07-16 23:58:32,

root@bigdata157 ~]# date -d @1500220712 +"%Y-%m-%d %H:%M:%S"
2017-07-16 23:58:32 

那麼在Trafodion中如果某個欄位儲存的值是整型數值,現在希望轉換為方便識別的timestamp格式應該如何實現呢?

檢視Trafodion官網上的SQL手冊發現有一個函式CONVERTTIMESTAMP感覺比較像,於是嘗試一下轉換沒有成功,錯誤提示要轉換的數值不在正確的資料範圍內。

SQL>select CONVERTTIMESTAMP(1500220712) from dual;

*** ERROR[8405] The operand of function CONVERTTIMESTAMP is out of range. [2017-11-30 13:37:06]

而這裡我們使用的1500220712是一個Unix timestamp對應的整型,這個值是自’1970-01-01 00:00:00’開始日期以來的秒數,既然這樣,如果我可以使用’1970-01-01 00:00:00’這個初始時間加上這個秒數再轉換為timestamp不就是我們想要得到的當前日期了麼?Trafodion提供了dateadd方法用於實現日期格式與與任意INVERTAL型別的加法(負數表示減法),因此這個轉換可以表達成以下方式,

SQL>select dateadd(SECOND,1500220712,timestamp '1970-01-01 00:00:00') from dual;

(EXPR)
---------------------
2017-07-16 15:58:32.0

--- 1 row(s) selected.