我有一个表名为Orders。 Orders表有两列名称,分别是start_date,end_date
timerExec
现在我想要2016-04-01的开始日期和2016-04-30的结束日期之间的记录。
请帮我解决这个问题
答案 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的评论。
答案 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'