对ANSI DATETIME的无效操作(从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"是一天、小时还是一年。

我如何选择的数据只有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'类似)。

相关内容

  • 没有找到相关文章

最新更新