2015-04-19 100 views
0

我將Stata(統計數據包)中的數據塊插入到Teradata數據庫中。我無法將日期和時間戳從Stata原生格式轉換爲Teradata。將數據插入Teradata時轉換日期和時間戳

Stata存儲自01/01/1960以來的日期,因此01jan1960爲0並且02jan1960爲1.時間戳記自01jan1960 00:00:00:00開始以毫秒爲單位存儲,因此1000爲01jan1960 00:00:01。這裏有一些例子:

  timestamp Stata's tstamp date   Stata's date 
2015-04-13 03:07:08 1744513628000 2015-04-13  20191 
2015-04-14 19:55:43 1744660543000 2015-04-14  20192 
2015-04-08 11:41:39 1744112499000 2015-04-08  20186 
2015-04-15 06:53:34 1744700014000 2015-04-15  20193 

我試過2種方法。第一個涉及插入,然後一旦數據被插入做這樣的事情之前轉換日期/時間戳在Stata字符串:

ALTER TABLE mytable ALTER date_variable DATETIME

然而,我無法弄清楚如何從文檔做第二部分我已經搜索了各種論壇。

第二種方法是將日期和時間戳留爲整數,然後在插入整數後再進行一些轉換。也許我還可以在Stata預轉換日期TD的內部格式:

gen td_date = ((year(stata_dt)-1900)*10000 + month(stata_dt)*100 + day(stata_dt)) 

但是,我不知道對時間戳的公式是什麼。我也不知道如何做第二部分(使整數成爲日期/時間戳)。

回答

1

您無法將Teradata中列的數據類型從字符串更改爲日期/時間戳。

但是,當您將一個字符串插入日期/時間戳列時,將會有一個自動的類型轉換。因此,只需將其轉換爲'yyyy-mm-dd'或'yyyy-mm-dd hh:mi:ss'格式的字符串即可。

你可以在Teradata加載過程中使用的計算也做了轉換,但恕我直言第一解決方案是優選的:

-- add the number of days to the start date 
DATE '1960-01-01' + stata_dt 

-- I use a similar approach for Unix Timestamps starting 1970 :-) 
-- split into days and seconds 
CAST(DATE '1960-01-01' + (stata_ts/86400000) AS TIMESTAMP(0)) 
+ ((stata_ts MOD 86400000/1000) * INTERVAL '00:00:01' HOUR TO SECOND)