簡體   English   中英

ANSI DATETIME上的無效操作(在Teradata中將一個時間戳減去另一個時間戳)

[英]Invalid Operation On An ANSI DATETIME (Subtracting one timestamp from another in Teradata)

我想創建一個WHERE條件以返回兩個時間戳之間僅經過1天的結果。 我嘗試了這個:

SELECT * FROM RDMAVWSANDBOX.VwNIMEventFct
INNER JOIN VwNIMUserDim ON VwNIMUserDim.NIM_USER_ID = VwNIMEventFct.NIM_USER_ID
INNER JOIN rdmatblsandbox.TmpNIMSalesForceDB ON TmpNIMSalesForceDB.EMAIL = VwNIMUserDim.USER_EMAIL_ADDRESS
WHERE (CONTRACT_EFFECTIVE_DATE - EVENT_TIMESTAMP) =1

但是結果是一條錯誤消息“ ANSI DATETIME值上的無效操作”。

我猜想,現在看一下代碼,Teradata無法知道“ = 1”中的“ 1”是日,小時還是年。

在CONTRACT_EFFECTIVE_DATE和EVENT_TIMESTAMP之間只有1天的時間,我該如何選擇數據?

同樣的2天和3天等嗎?

如果兩列均為DATE,則可以使用=1 ,表示一天。

對於時間戳,您需要告訴您想要哪種間隔:

WHERE (CONTRACT_EFFECTIVE_DATE - EVENT_TIMESTAMP) DAY = INTERVAL '1' DAY

但是我不確定這是否是您真正想要的,您對1天的定義是什么?

編輯:

根據您的評論,最好的方法應該是:

WHERE CAST(CONTRACT_EFFECTIVE_DATE AS DATE) - CAST(EVENT_TIMESTAMP AS DATE) = 1

這樣可以避免處理INTERVAL算法:-)

不確定Teradata,但我認為大多數SQL版本都具有內置的日期數學函數。 例如,在MSSQL中,您可以執行以下操作:

...
WHERE DATEDIFF(DAY, CONTRACT_EFFECTIVE_DATE, EVENT_TIMESTAMP) = 1

或者,如果您想確保已過24小時,則可以執行以下操作:

...
WHERE DATEDIFF(HOUR, CONTRACT_EFFECTIVE_DATE, EVENT_TIMESTAMP) = 1

其他SQL都有自己的版本,您可能必須使用'D'或'DD'而不是'DAY'或其他名稱(也許也可以使用'HH'而不是'HOUR')。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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