2013-06-04 46 views
0

我有三個日期列在數據庫行。這些列彼此獨立,因爲它們中的任何一個都可以被填充或NULL。MySQL,檢查範圍之間的多個日期

我想檢查所有行中的任何日期列落入已知範圍內。

這是我在我的WHERE子句:

WHERE (d.date1 OR d.date2 OR d.date3) 
    BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' 

任何想法,爲什麼這是行不通的,將不勝感激。

非常感謝

+0

只是出於好奇,你會如何選擇列A或列B的值爲2? 「(A或B)= 2」或「其中A = 2或B = 2」? – cernunnos

回答

1

您誤會了「OR」是多麼的合乎邏輯。

WHERE (d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
    OR (d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
    OR (d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
0

您必須分別指定三個部分。

注意(d.date1 OR d.date2 OR d.date3)將評估爲true如有的日期有一個值,那麼你的WHERE子句是目前的這種等價的:

WHERE TRUE BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' 

所以你需要單獨測試每個日期:

WHERE d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' 
    OR d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' 
    OR d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' 
+0

太好了,非常感謝!這是有道理的。然而,我正在使用的代碼只允許我使用每個已知的日期變量。所以雖然上述是合乎邏輯的結果,但我無法使用它。我需要一些方法來比較每個日期與範圍,但只聲明一次日期範圍。再次感謝。 – Boomfelled

0

你應該做這樣的:

WHERE (d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
OR (d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
OR (d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46') 
0

由於Between運算符需要Between之間的單個值。反向序列...像這樣:

WHERE d.date1 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' Or 
     d.date2 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46' Or 
     d.date3 BETWEEN '2011-11-09 13:08:46' AND '2011-11-11 16:08:46'