如何使用单个sql查询查询小于或等于多个日期的日期?
我需要找到
date <= ('29-05-2018', '30-05-2018', '31-05-2018')
提前致谢。
答案 0 :(得分:7)
限制性最强的日期,即最早的日期,将确定过滤,因为任何大于此的日期都将限制较少。因此,使用ALL
的替代方法是使用LEAST
:
WHERE date <= LEAST('2018-05-29', '2018-05-30', '2018-05-31')
编辑(戈登):
在Oracle中,这将是:
WHERE date <= LEAST(DATE '2018-05-29', DATE '2018-05-30', DATE '2018-05-31')
答案 1 :(得分:5)
您可以使用ALL
:
将值与列表中的每个值进行比较或由查询返回。必须以=,!=,&gt;,&lt;,&lt; =,&gt; =开头。 可以跟随任何返回一个或多个值的表达式或子查询。
date <= ALL('29-05-2018', '30-05-2018', '31-05-2018');
是否可以在ALL运算符的子查询中包含硬编码日期?
是的,有可能:
SELECT *
FROM tab_name
WHERE date <= ALL (SELECT some_date_column
FROM tab_name_2
WHERE ...);
<=>
SELECT *
FROM tab_name
WHERE date <= (SELECT MIN(some_date_column)
FROM tab_name_2
WHERE ...);
我没有在表格中列出这些日期。我只是想知道今天到(今天+30天)的日期
SELECT *
FROM table_name
WHERE date BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 30; -- Oracle