WHERE 子句中多行的单列
Single column for multiple rows within WHERE clause
我正在尝试合并列名称上的 where 子句。我需要单列 return 肯定条件,但相同的条件适用于许多列。下面是蛮力示例,用于检查多个列上特定范围之间的日期。我有具有完全相同条件的列 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。
第一部作品;第二个是语法错误。
我比较喜欢
BETWEEN NOW() + INTERVAL 16-24 HOUR
AND NOW() + INTERVAL 16 HOUR
如果 16
是由于时区的原因,请考虑使用 TIMESTAMP
and/or 适当地设置您的系统时间。
我正在尝试合并列名称上的 where 子句。我需要单列 return 肯定条件,但相同的条件适用于许多列。下面是蛮力示例,用于检查多个列上特定范围之间的日期。我有具有完全相同条件的列 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。
第一部作品;第二个是语法错误。
我比较喜欢
BETWEEN NOW() + INTERVAL 16-24 HOUR
AND NOW() + INTERVAL 16 HOUR
如果 16
是由于时区的原因,请考虑使用 TIMESTAMP
and/or 适当地设置您的系统时间。