获取开始日期和结束日期之间的数据

时间:2017-09-11 13:56:18

标签: php mysql

在开始日期和结束日期之间获取数据

我正在获取数据,但我的要求有点不同请查看以下数据库

我有两个文本框

1) start date
2) end date

数据库就像这样

table name->purchase_order

   sno       start_date          end_date
     1       2017/08/01          2017/12/01
     2       2017/08/01          2017/11/30
     3       2017/09/01          2017/09/30
     4       2017/09/01          2017/10/30
     5       2017/10/01          2017/11/30

我正在尝试这样

select  * 
from    purchase_order 
where   start_date>= '2017/09/01' and start_date<= '2017/09/01' 
        OR end_date>= '2017/09/01' and end_date<= '2017/09/01'

输出我正在

 sno     start_date     end_date
 3       2017/09/01          2017/09/30
 4       2017/09/01          2017/10/30   

我需要什么

如果我在2017/09/01 - 2017/09/30之间选择,我想要像这样{在id&#34; 1&#34;在第8个月到第12个月之间有第9个月,所以它也必须来}

 sno       start_date          end_date
 1       2017/08/01          2017/12/01
 2       2017/08/01          2017/11/30
 3       2017/09/01          2017/09/30
 4       2017/09/01          2017/10/30

谢谢

2 个答案:

答案 0 :(得分:1)

您希望查看日期是否在列值之间,而不是检查列值是否在您的日期之间。使用BETWEEN使逻辑看起来更清晰:

select * from purchase_order where  '2017/09/01' BETWEEN start_date AND end_date

如果您选择2017/09/01 - 2017/09/30,请执行以下操作:

select * from purchase_order where  '2017/09/01' BETWEEN start_date AND end_date AND '2017/09/30' BETWEEN start_date AND end_date

AND将确保两个日期都在start_date和end_date之间,OR将确保至少有一个日期位于列之间。

答案 1 :(得分:0)

你不希望你的问题中有4个条款,你只想要2个 逻辑应该如下:

  1. 应用程序中输入的开始日期晚于或等于表格中起始栏中的开始日期
  2. 应用程序中输入的结束日期早于或等于
  3. 中结束列的结束日期

    应用。

    基于此逻辑,您应该能够使用以下查询:

    SELECT 
        * 
    FROM    purchase_order 
    WHERE   start_date<= '2017/09/01'  -- start date input
    AND     end_date<= '2017/09/01'  -- end date input
    

    有人可能会抱怨我的逻辑漏洞,因为我没有检查结束日期是否晚于开始日期,尽管您希望在应用程序级别这样做因此,在提出此问题的数据库级别上,它无关紧要。