2017-07-17 89 views
1

我越來越有2個時間戳之間的時間源數據店持續時間的Teradata

Duration   Start date   End date  Start station 
14h 26min. 2sec. 12/31/2010 23:49 1/1/2011 14:15 10th & U St NW (31111) 

我怎麼能導入此數據(這是CSV文件)中的Teradata數據庫存儲在正確的數據類型持續時間,所以我可以正確匹配開始和結束數據之間的區別嗎?

請在這裏幫助正確的做法。

在此先感謝

+1

持續時間是否包括小時和分鐘?最長持續時間是多少?如何開始和結束格式化,在你的例子中沒有秒,但持續時間? – dnoeth

+0

@dnoeth:是的,先生,我已經要求這個來源系統,在開始和結束日期沒有秒他們會添加它,請考慮秒截至目前。數據包括23小時32分鐘等字段。 8秒。和像0小時0分鐘的字段。 4秒。 'h''min。''和'秒'。包含在'。'中並且數據是否爲'0',其中h,min總是包含的。 - –

回答

2

這非常棘手。

純粹的基於SQL的解決方案(沒有ETL工具的功能)需要生成可安全地轉換的數據。

這將修改你的持續時間分成(應被定義爲INTERVAL HOUR(4) TO SECOND(0)目標列),它可以通過刪除不必要的字符傳遞給to_dsinterval除了HMS格式

Cast(to_dsinterval('PT'||Upper(OTranslate(duration, ' in.ec', ''))) AS INTERVAL HOUR(4) TO SECOND(0)) 

你輸入時間戳顯示個位數日/月,它的Teradata不支持(不AKS爲什麼),正則表達式將那些缺少零(當秒缺少刪除格式的:ss部分):

Cast(RegExp_Replace(start_date, '\b([0-9])\b', '0\1') AS TIMESTAMP(0) Format 'mm/dd/yyyyBhh:mi:ss') 

最後將持續時間&時間戳記作爲VarChars並在插入期間應用Casts。

+0

@ doneth謝謝,我會檢查並通知你。 –

+0

@doneth:像預期的那樣工作,並學習了很多這個to_dsinterval函數。再次感謝。 –