我正在尝试合并列名上的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
和/或适当地设置系统时间。