2017-09-11 56 views
1

找我得到的数据开始日期和结束日期得到的开始日期和结束日期

之间的数据之间的数据,但我的要求是有点不同,请检查下面的数据库

我有两个文本boxs

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年9月1日之间进行选择 - 2017年9月30日我想出来把这样{在ID “1”,在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 

感谢

+0

你能解释为什么当你只有2个输入源时你有4个子句吗? – Eli

+0

你可以使用'BETWEEN'。 – Qirel

回答

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将确保在至少有一个日期在列之间。

0

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

  1. 从输入开始日期应用程序在你的桌子
  2. 从输入中应用较早或等于到底列结束日期在

申请截止日期后或等于起始列的开始日期。

基于这个逻辑,你应该能够使用以下查询:

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

一个可能会抱怨我有我的逻辑孔由于我没有请检查结束日期晚于开始日期,尽管您希望在应用程序级别执行此操作,因此它与提出此问题的数据库级别无关。

相关问题