在开始日期和结束日期之间获取数据
我正在获取数据,但我的要求有点不同请查看以下数据库
我有两个文本框
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
谢谢
答案 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个 逻辑应该如下:
应用。
基于此逻辑,您应该能够使用以下查询:
SELECT
*
FROM purchase_order
WHERE start_date<= '2017/09/01' -- start date input
AND end_date<= '2017/09/01' -- end date input
有人可能会抱怨我的逻辑漏洞,因为我没有检查结束日期是否晚于开始日期,尽管您希望在应用程序级别这样做因此,在提出此问题的数据库级别上,它无关紧要。