2012-12-04 35 views
0

我一个MySQL表这样的期间:检查是否包含两个日期

| ID | ID_period | date_start | date_end | 
    | 1 | 1  | 0000-07-01 | 0000-08-31 | 
    | 2 | 2  | 0000-09-01 | 0000-10-30 | 
    | 3 | 3  | 0000-11-01 | 0000-12-28 | 
    | 4 | 4  | 0000-11-01 | 0000-03-31 | 

我如何可以选择包含在此期间0000/07/14之间的标识 - 0000/08/25 ?

date_start和date_end列是DATE格式。

问题是,如果我搜索一个时期(包括和相交),即:从0000-12-12到0000-01-25我从选择0记录,我猜是今年'0000'..我该如何解决它?

另一个问题是,如果我搜索一个像11-01到12-31这样的时期,我得到了0个结果..因为最后一天od_date在date_end是28 ..但是如果我搜索一个时期11-01到12 -31是因为我希望所有的记录,包括..所以我想获得具有记录id = 3,ID = 4

目前IM

使用以下查询:

SELECT ... WHERE '12' BETWEEN MONTH(date_start) and MONTH(date_end) 
AND '15' BETWEEN DAY(date_start) and DAY(date_end) 
AND '03' BETWEEN MONTH(date_start) and MONTH(date_end) 
AND '28' BETWEEN DAY(date_start) and DAY(date_end) 
+0

您是指所有与该时期重叠或完全包含在该时期内的IDS?在你的例子中,这似乎并不重要,但可能在你的真实数据中。 –

+0

“包含”是什么意思?完全在或相交? –

+0

问题是,如果我搜索一个时期(包括和相交),即:从0000-12-12到0000-01-25我从选择0记录,我猜是'0000' ..我如何解决它? – Luke

回答

1
SELECT * 
FROM mytable 
WHERE date_start BETWEEN '0000-07-14' AND '0000-08-25' 
     OR date_end BETWEEN '0000-07-14' AND '0000-08-25' 
     OR (date_start<'0000-07-14' AND date_end>'0000-08-25') 
+1

问题是,如果我搜索一个时期(包括和相交),即:从0000-12-12到0000-01-25我从选择0记录,我猜是'0000' ..我如何解决它? – Luke

+0

12-12到01-25?结束日期是否可以小于开始日期? –

+0

废话..所以如何找到像12-12到01-15这样的时期的记录呢? – Luke

相关问题