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

tpxzln5u  于 2023-05-28  发布在  Mysql
关注(0)|答案(2)|浏览(127)

获取开始日期和结束日期之间的数据
我得到的数据,但我的要求是有点不同,请检查下面的数据库
我有两个文本框

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“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

谢谢

gg58donl

gg58donl1#

您不需要检查列值是否在您的日期之间,而是希望查看日期是否在列值之间。使用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将确保至少有一个日期在列之间。

hgtggwj0

hgtggwj02#

你不想像你的问题中那样有4个从句,你只想有2个从句。
逻辑应如下:
1.应用程序中输入的开始日期晚于或等于表中开始列中的开始日期
1.应用程序中输入的结束日期早于或等于
应用程序。
基于此逻辑,您应该能够使用以下查询:

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

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

相关问题