2016-11-03 37 views
0

我試圖合併列名的where子句。我需要單個列才能返回正值,但同樣的條件適用於許多列。蠻力的例子如下,檢查幾列之間的某個範圍之間的日期。我有完全相同的條件OR'd。WHERE子句中的多行的單列

SELECT * FROM foo 
WHERE foo.date1 BETWEEN DATE_SUB(DATE_ADD(DATE(NOW()), INTERVAL 16 HOUR), INTERVAL 24 HOUR) and DATE_ADD(DATE(NOW()), INTERVAL 16 HOUR) 
OR foo.date2 BETWEEN DATE_SUB(DATE_ADD(DATE(NOW()), INTERVAL 16 HOUR), INTERVAL 24 HOUR) AND DATE_ADD(DATE(NOW()), INTERVAL 16 HOUR); 

我寧願做線沿線的東西:

SELECT * FROM foo 
WHERE (foo.date1 OR foo.date2) BETWEEN DATE_SUB(DATE_ADD(DATE(NOW()), INTERVAL 16 HOUR), INTERVAL 24 HOUR) and DATE_ADD(DATE(NOW()), INTERVAL 16 HOUR); 

..但它仍然是各個列跨行合作。

我使用MariaDB,但可以適應任何解決方案從其他口味的SQL。

回答

1

第一部作品;第二個是糟糕的語法。

我喜歡

BETWEEN NOW() + INTERVAL 16-24 HOUR 
    AND NOW() + INTERVAL 16 HOUR 

如果16是由於時區,可以考慮使用TIMESTAMP和/或適當設置您的系統時間。