我有三個日期列在數據庫行。這些列彼此獨立,因爲它們中的任何一個都可以被填充或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'
任何想法,爲什麼這是行不通的,將不勝感激。
非常感謝
我有三個日期列在數據庫行。這些列彼此獨立,因爲它們中的任何一個都可以被填充或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'
任何想法,爲什麼這是行不通的,將不勝感激。
非常感謝
您誤會了「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')
您必須分別指定三個部分。
注意(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'
太好了,非常感謝!這是有道理的。然而,我正在使用的代碼只允許我使用每個已知的日期變量。所以雖然上述是合乎邏輯的結果,但我無法使用它。我需要一些方法來比較每個日期與範圍,但只聲明一次日期範圍。再次感謝。 – Boomfelled
你應該做這樣的:
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')
由於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'
只是出於好奇,你會如何選擇列A或列B的值爲2? 「(A或B)= 2」或「其中A = 2或B = 2」? – cernunnos