![](/img/trans.png)
[英]Teradata Error 5407 Invalid operation for DateTime or Interval
[英]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.