如何在mysql上的同一个表上选择具有两个不同输入值的两个不同列之间的行

时间:2016-05-04 13:16:54

标签: mysql sql

我有一个表名为Orders。 Orders表有两列名称,分别是start_date,end_date

timerExec

现在我想要2016-04-01的开始日期和2016-04-30的结束日期之间的记录。

请帮我解决这个问题

5 个答案:

答案 0 :(得分:3)

假设您想要与范围重叠的记录:

SELECT *
  FROM orders
 WHERE start_date <= :end_range
   AND end_date   >= :start_range

在你的情况下:

SELECT *
  FROM orders
 WHERE start_date <= '2016-04-30'
   AND end_date   >= '2016-04-01'

其工作原理如下:

           <---RANGE-->
     <-->                                     X end_date   < :start_range
R      <---->                                 Returned
O             <---->                          Returned
W         <--------------->                   Returned
S                   <---->                    Returned
                            <-->              X start_date > :end_range

答案 1 :(得分:1)

假设start_date总是&lt; = end_date,您可以通过下面的查询获得更好的结果,因为它在start_date过滤器上提供了更多的特异性:

select * 
from Orders 
where start_date between '2016-04-01' and '2016-04-30'
    and end_date between '2016-04-01' and '2016-04-30'

答案 2 :(得分:1)

你想要: 从'04 / 01/2016'和'04 / 30/2016'之间的start_date订单中选择* AND_END_date介于'04 / 01/2016'和'04 / 30/2016'

之间

答案 3 :(得分:0)

这是你正在寻找的吗?

select * 
from Orders 
where 
    (start_date >= '2016-04-01' and start_date < '2016-05-01'); 

修改 更新以反映OP的评论。

SQL Fiddle

答案 4 :(得分:0)

如果您只想订购4/4 - 4/30的订单,那么:

SELECT *
FROM
   orders
WHERE
   start_date = '2016-4-1'
   AND end_date = '2016-4-30'

如果您希望订单 在4/1开始或在4/30结束,那么:

SELECT *
FROM
   orders
WHERE
   start_date = '2016-4-1'
   OR end_date = '2016-4-30'

OP评论后编辑

SELECT *
FROM
    orders
WHERE
    start_date between '2016-4-1' AND '2016-4-30'
    OR end_date between '2016-4-1' AND '2016-4-30'