簡體   English   中英

Teradata日期時間減法和轉換

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM