我想创建一个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"是一天、小时还是一年。
我如何选择的数据只有1天之间的contract_effecve_date和EVENT_TIMESTAMP?
2天,3天,等等?
如果两列都是日期,则可以使用=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'类似)。