我写了这个查询: 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天内。 你能帮忙吗?
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
1条答案
按热度按时间cld4siwp1#
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小时内(不含),则可以用途:
如果您只想比较日期组件,并且在3天内,则: