首页 > 解决方案 > BETWEEN Two Dates 返回相同两个日期的行,而不是返回之间的行

问题描述

我正在尝试选择两个特定日期之间的行,但我得到的是与指定日期相同的行 BETWEEN 。我尝试使用运算符 > 和 <,但似乎没有任何效果。它与日期格式有关吗?

SELECT  r.RESERVATION_ID, a.AGENT_ID, a.AGENT_FNAME AS AGENT_NAME, t.TRIP_ID,
s.RESERVATION_STATUS

FROM RESERVATION r 
INNER JOIN AGENT a
ON
a.AGENT_ID=r.AGENT_ID

INNER JOIN TOURTRIP_RESERVATION t
ON
r.RESERVATION_ID=t.RESERVATION_ID

INNER JOIN RESERVATION_STATUS s
ON
r.RESERVATION_STATUSID=s.RESERVATION_STATUSID

WHERE r.AGENT_ID IS NOT NULL
AND r.RESERVATION_DATE BETWEEN '15-MAR-20' AND '26-MAY-20'
AND r.RESERVATION_STATUSID=100;

我使用to_date('03.06.2020','DD.MM.YYYY')格式来更新reservation_id 列中的数据。但是,当我使用

and RESERVATION_DATE > to_date('15.03.2020','DD.MM.YYYY') 
and RESERVATION_DATE < to_date('26.05.2020','DD.MM.YYYY')

它什么也没返回

这是预订表

在此处输入图像描述

标签: sqloracleselectbetween

解决方案


之间的条件包括开始和结束。
您可以使用运算符 > 和 < 来排除它。

您的示例简化了:

create table RESERVATION (
 RESERVATION_ID number
,RESERVATION_DATE date)

数据:

insert into RESERVATION values (1, to_date('01.06.2020','DD.MM.YYYY'));
insert into RESERVATION values (2, to_date('02.06.2020','DD.MM.YYYY'));
insert into RESERVATION values (3, to_date('03.06.2020','DD.MM.YYYY'));

查询 A)

select RESERVATION_ID 
  from RESERVATION
 where RESERVATION_DATE between to_date('01.06.2020','DD.MM.YYYY') 
                            and to_date('03.06.2020','DD.MM.YYYY')

将返回:

1
2
3

查询 B)

select RESERVATION_ID 
  from RESERVATION
 where RESERVATION_DATE > to_date('01.06.2020','DD.MM.YYYY') 
   and RESERVATION_DATE < to_date('03.06.2020','DD.MM.YYYY')

将返回

2

我假设RESERVATION_DATE是一个日期。始终使用显式数据类型转换。


推荐阅读