WHERE子句中的多行对应单列



我正在尝试合并列名上的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适应任何解决方案。

第一部作品;第二个是错误的语法。

我喜欢

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

如果16是由于时区,请考虑使用TIMESTAMP和/或适当地设置系统时间。

最新更新