简体   繁体   English

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

[英]Query dates that is lesser or equal to set of date ranges

How do I query dates that is lesser than or equal to more than one dates with single sql query? 如何使用单个SQL查询查询小于或等于多个日期的日期?

I need to find 我需要找到

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

Thanks in advance. 提前致谢。

The most restrictive date, ie the earliest one, will determine the filtering, since any dates greater than this would be less restrictive. 限制最严格的日期(即最早的日期)将确定过滤条件,因为大于此日期的任何日期都将限制较少。 So, an alternative to using ALL would be to use LEAST : 因此,使用ALL的替代方法是使用LEAST

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

EDIT (by Gordon): 编辑(作者戈登):

In Oracle, this would be: 在Oracle中,这将是:

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

You could use ALL : 您可以使用ALL

Compares a value to every value in a list or returned by a query. 将值与列表中的每个值或查询返回的值进行比较。 Must be preceded by =, !=, >, <, <=, >=. 必须以=,!=,>,<,<=,> =开头。 Can be followed by any expression or subquery that returns one or more values. 后面可以跟任何返回一个或多个值的表达式或子查询。

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

Is it possible to have hardcoded dates in the sub query for ALL operator? 是否可以在子查询中为ALL运算符添加硬编码日期?

Yes it is possible: 对的,这是可能的:

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 ...);

I don't have have those dates in the table. 我桌上没有这些日期。 I just want to find out the dates which lies from today to (today + 30 days) 我只想找出从今天到今天(今天+ 30天)的日期

SELECT *
FROM table_name
WHERE date BETWEEN TRUNC(SYSDATE) AND TRUNC(SYSDATE) + 30; -- Oracle

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM