2013-02-21 164 views
1

我有一张有宿舍和开始和结束日期的表格。
在日期范围内选择宿舍

 
|yrq |start_date|end_date | 
|--------------------------| 
|B233|2013-01-07|2013-03-23| 
|B232|2012-09-24|2012-12-20| 
|B231|2012-06-25|2012-09-13| 
|B124|2012-04-02|2012-06-21| 
|B123|2012-01-09|2012-03-27| 
... 

获取yrqs完全,这意味着yrqs完全落在日期范围内:

SELECT yrq FROM yrq WHERE start_date>='2012-02-01' AND end_date<='2013-02-01';

除了第一个和最后一个yrqs返回(),即使日期在B233B123之间。很好去!

我发现了如何获得yrqs包含地,如果日期落在YRQ中间的意思,包括它(翻转“<”和“>”符号,并开始和结束日期传递):

SELECT yrq FROM yrq WHERE start_date<='2013-02-01' AND end_date>='2012-02-01';

这将返回所有列出的宿舍,没有其他宿舍。很好去!

查询我遇到的问题是获取一个yrq,其中的开始日期和结束日期完全在其中。例如:我想查找日期范围2013-02-012013-02-15的yrq,这将是B233

我打电话给运行查询的php函数。我传递一个包容性的标志,如果我没有答案,应该在包含性的情况下返回一个结果。为了封装所有包含案例,我计划运行查询,我没有第一个答案,如果它返回一个空集,然后运行上面的包含查询。如果有一种更优雅的方式,我是全部耳朵。

谢谢!

+0

对不起,我已经解决了包容性的情况下。我在白板上写了这张票的任务,并没有想到要排除我已经解决的问题。我已经写过这个查询:'SELECT qtr FROM qtr WHERE start_date> ='2011-09-12'AND end_date <='2013-02-02'' – Chrizzis 2013-02-21 05:27:22

+0

你说“如果* *日期落在中间...... “ 哪个日期?你能给我们更多的输入/输出例子吗? – 2013-02-21 05:50:12

+0

编辑我的问题以满足此评论。 – Chrizzis 2013-02-21 06:36:10

回答

0

该查询返回yrq的参数在start_date和end_date内。这是你想要的?

SELECT * 
    FROM yrq 
WHERE '2013-02-01' BETWEEN start_date AND end_date 
    AND '2013-02-15' BETWEEN start_date AND end_date 

Fiddle