2014-02-18 28 views
3

我有以下的表稱爲季節MySQL的:開始和結束日期之間的適當日期範圍內的兩個字段

+----+--------+------------+------------+ 
| id | cost | start  | end  | 
+----+--------+------------+------------+ 
| 33 | 255 | 2014-01-05 | 2014-04-16 | 
| 17 | 357 | 2014-04-17 | 2014-04-19 | 
| 65 | 191.25 | 2014-04-20 | 2014-07-10 | 
| 49 | 255 | 2014-07-11 | 2014-08-23 | 
| 81 | 191.25 | 2014-08-24 | 2014-12-18 | 
+----+--------+------------+------------+ 

我嘗試使用下面的查詢來獲取的開始和結束之間的日期範圍。

SELECT 
    * 
FROM 
    seasons 
WHERE 
    (start BETWEEN '2014-01-05' AND '2014-01-05' OR end BETWEEN '2014-01-05' AND '2014-01-05'); 

我能夠得到一個結果集,如果開始日期恰好開始在字段上的值。

+----+------+------------+------------+ 
| id | cost | start  | end  | 
+----+------+------------+------------+ 
| 33 | 255 | 2014-01-05 | 2014-04-16 | 
+----+------+------------+------------+ 

現在的問題是,當我日期提前到

2014年1月6日

SELECT 
    * 
FROM 
    seasons 
WHERE 
    (start BETWEEN '2014-01-06' AND '2014-01-06' OR end BETWEEN '2014-01-06' AND '2014-01-06'); 

空集(0.00秒)

沒有結果T.我怎樣才能在SQL中的不同領域之間的日期範圍?

任何幫助表示讚賞。

+0

這也被討論。 http://stackoverflow.com/questions/3822648/mysql-query-between-two-dates –

回答

5

你有你的邏輯落後。如果您希望的季節,其中一個給定的日期是在那個賽季那麼你的where子句中應該是這樣的:

WHERE '2014-01-06' BETWEEN start AND end; 
+0

沒有sh * t。這工作!你能簡單地解釋爲什麼它落後了嗎?謝謝 –

+0

@LouieMiranda當然。您的原始邏輯是檢查「2014-01-06」與「2014-01-06」之間的開始日期或結束日期的季節。這與說'WHERE start ='2014-01-06'OR end ='2014-01-06''是一樣的。你真正想要的是在該季節開始和結束日期之內的任何季節。 – Jim

+0

謝謝你解釋吉姆。 –

1

當查詢,如果某一日期是在給定的範圍內,WHERE條款通常是:

WHERE 'specified_date' BETWEEN 'start_date' AND 'end_date' 

否則,這是MySQL的一個不合邏輯的日期範圍,將返回一個空的結果集。

BETWEEN比較運算符相當於:

分鐘< = EXPR AND EXPR < =最大

因此,它的意思是這樣被使用:

EXPR BETWEEN MIN和MAX

這裏是關於BETWEEN Comparison Operator上MySQL的文檔。

2

既然你是不是真的找一個範圍,只需要一個特定的日期,你也可以只使用(SQL Fiddle):

SELECT * 
FROM seasons 
WHERE start = '2014-01-05' OR end = '2014-01-05' 
相關問題