oracle 如何使用日期差异作为过滤器

8e2ybdfx  于 2023-05-16  发布在  Oracle
关注(0)|答案(1)|浏览(222)

我写了这个查询:

select A.purchase_date, B.purchase_date
from table A
inner join table B on A.person_ID=B.person_ID
WHERE to_date(A.purchase_date) - to_date(B.purchase_date) < 3

换句话说,我自己加入一个表。然而,在结果中,我看到purchase_date不在3天内。
你能帮忙吗?

7gcisfzg

7gcisfzg1#

1.不要在已经是日期的列上使用TO_DATE;在最好的情况下,这将什么也不做,在最坏的情况下,你将截断你的日期,将时间部分更改为午夜(这可能是也可能不是你的意图-如果是,那么使用TRUNC,而不是TO_DATE)。
1.你对日期之间的差异设置了一个上限,但你没有对差异设置下限,如果两行DATE '2023-01-01'DATE '2023-01-10',那么DATE '2023-01-10' - DATE '2023-01-01'是9,会被过滤掉,但DATE '2023-01-01' - DATE '2023-01-10'是-9,不会被过滤掉,所以你会发现所有行都匹配。
如果您想要的日期在72小时内(不含),则可以用途:

SELECT A.purchase_date, B.purchase_date
FROM   table A
       inner join table B
       on A.person_ID=B.person_ID
WHERE  B.purchase_date - 3 < A.purchase_date
AND    A.purchase_date < B.purchase_date + 3

如果您只想比较日期组件,并且在3天内,则:

SELECT A.purchase_date, B.purchase_date
FROM   table A
       inner join table B
       on A.person_ID=B.person_ID
WHERE  TRUNC(B.purchase_date) - 3 <= A.purchase_date
AND    A.purchase_date < TRUNC(B.purchase_date) + 4

相关问题