我试图合并列名的where子句。我需要一个列在条件上返回正数,但同样的条件适用于许多列。蛮力的例子如下,检查几列上某个范围之间的日期。我的列OR' d具有完全相同的条件。
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的解决方案。
答案 0 :(得分:1)
第一部作品;第二个是错误的语法。
我更喜欢
BETWEEN NOW() + INTERVAL 16-24 HOUR
AND NOW() + INTERVAL 16 HOUR
如果16
是由时区引起的,请考虑使用TIMESTAMP
和/或正确设置系统时间。