查询日期小于或等于日期范围集

时间:2018-05-29 05:00:21

标签: mysql sql

如何使用单个sql查询查询小于或等于多个日期的日期?

我需要找到

date <= ('29-05-2018', '30-05-2018', '31-05-2018')

提前致谢。

2 个答案:

答案 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