如何在查询中传递日期

时间:2019-04-24 11:47:31

标签: sql database oracle

我有一个表,该表具有开始日期和结束日期。我必须获取这些日期并检查这些日期是否在另一个表的列值的范围内...

我尝试使用select查询来获取开始日期和结束日期,并使用between关键字检查范围

select invoice 
from customer 
where BOOK_DATE BETWEEN(select begindate, enddate 
                        from Period 
                        where i_status = 1)

实际结果:缺少关键字 预期结果:例如:开始日期= 19年5月1日,结束日期= 19年5月31日,book_date = 19年5月15日,它应返回发票编号,例如“ 123ABC”

2 个答案:

答案 0 :(得分:2)

您可以使用EXISTS和相关的子查询来检查是否存在时段内的行,预订日期在开始日期和结束日期之间,状态为1。

SELECT c.invoice
       FROM customer c
       WHERE EXISTS (SELECT *
                            FROM period p
                            WHERE c.book_date BETWEEN p.begindate
                                                      AND p.enddate
                                  AND p.i_status = 1);

答案 1 :(得分:0)

两者之间有一个AND,您应该尝试

BETWEEN(SELECT begindate FROM Period WHERE i_status = 1) AND (SELECT enddate FROM 
Period WHERE i_status = 1)