[英]Teradata date time subtraction and conversion
如何將以下Oracle轉換轉換為Teradata:
select
round((current_timestamp - ah.adate) - (ah.ahdate-ah.adate),1)
,round(ah.ahdate-ah.addate,1)
from actions ah
我相信以下比較之一應在Teradata中起作用:
SELECT Current_Timestamp - CAST(ah.addate AS TimeStamp(6)) DAY (4) TO SECOND(4) AS TimeInterval
, Current_Date - CAST(ah.addate AS DATE) DAY(4) AS DayInterval /* May Not be necessary as two dates can be subtracted/added without INTERVAL */
, Current_Date - ah.addate AS DayDifference /* If AdDate is a DATE in Teradata */
FROM actions ah
編輯 :將時間戳之間的差異分解為秒,然后使用數學計算兩個時間戳之間的天數為FLOAT。
SELECT (((EXTRACT (DAY FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND)) * 86400)
+ (EXTRACT (HOUR FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND)) * 3600)
+ (EXTRACT (MINUTE FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND)) * 60)
+ (EXTRACT (SECOND FROM (Current_Timestamp - Timestamp '2015-04-01 21:13:40' DAY TO SECOND))) AS FLOAT)) / 86400.00
這是很丑陋的罪過,但是它將使您從兩個時間間隔中減去的天數達到一個小數位。
SELECT
ROUND(
STRTOK(CAST((TIMESTAMP '2017-04-17 07:08:34.000' - TIMESTAMP '2015-04-09 16:30:14.000' DAY(4) TO HOUR) AS VARCHAR(10)),' ',1) +
(STRTOK(CAST((TIMESTAMP '2017-04-17 07:08:34.000' - TIMESTAMP '2015-04-09 16:30:14.000' DAY(4) TO HOUR) AS VARCHAR(10)),' ',2)/24)
,1)
這里最棘手的部分是,當您減去兩個TIMESTAMPs
,最終得到的是INTERVAL
數據類型。 我們將該時間間隔數據類型轉換為HOUR
,然后將結果轉換為VARCHAR
,在此示例中看起來像738 15
。 那是738天15小時。
使用STRTOK()
,我們可以選擇天數(第一個令牌),然后加上小時數(第二個令牌)除以24。
然后將結果四舍五入。
也許有一種較少參與的方法,但是我還沒有發現。
使用此解決方案:,trim(abs((CAST(ah.ahdate AS DATE)-CAST(ah.adate AS DATE))))),(cast(trim(abs((EXTRACT(HOUR FROM ah.ahdate))-abs (EXTRACT(HOUR FROM ah.adate))))作為varchar(10)))/ 24
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.