Sql 如何查询检查一个月是否在两个日期之间?

Sql 如何查询检查一个月是否在两个日期之间?,sql,postgresql,Sql,Postgresql,我正在postgresql中查找查询,以检查一个月是否介于两个日期之间 我知道如何检查日期是否介于两个日期之间。博士后也有这样的功能 假设我有一个包含行的a_表: ID | start_date (timestamp) | end_date (timestamp) 1 | 2019-07-20 00:00 | 2020-03-20 00:00 2 | 2019-08-20 00:00 | 2020-08-30 00:00 我必须返回包含开始日期和结束日期之间一

我正在postgresql中查找查询,以检查一个月是否介于两个日期之间

我知道如何检查日期是否介于两个日期之间。博士后也有这样的功能

假设我有一个包含行的a_表:

ID | start_date (timestamp)  | end_date (timestamp)
1  | 2019-07-20 00:00        | 2020-03-20 00:00
2  | 2019-08-20 00:00        | 2020-08-30 00:00
我必须返回包含开始日期和结束日期之间一个月的行。 假设我有2019-08年的一个月。 所以当我数的时候

Select count(*) from a_table 
Where [some where clause]
它返回两行,ID 1和ID 2


当我有一个2020-01月份时,它只返回ID 1,您可以在where子句中使用TOU date。你的where子句是这样的

WHERE '2019-08' BETWEEN to_date(start_date, 'YYYY-MM') and to_date(end_date ,'YYYY-MM')
你可以用这个

如果表中的开始/结束日期仅涵盖一个月的一部分,我不清楚该怎么办

如果您只想考虑整个月份,请使用包含运算符< /P>

select count(*)
from the_table
where daterange(start_date::date, end_date::date, '[]') @> daterange('2019-08-01'::date, '2019-09-01'::date, '[)');

我建议这样写:

WHERE end_date >= TO_DATE('2019-08', 'YYYY-MM') AND
      start_date < TO_DATE('2019-08', 'YYYY-MM') + INTERVAL '1 MONTH'
也就是说,周期至少包括一个月的一天,因为它在月底之前开始,在月初之后结束


此外,它在表中的列上没有函数。因此,如果索引在任一列上都可用,则可以使用它。如果将开始/结束定义为一个范围,那么这就提供了使用索引的其他机会。

如果输入为2020-01,并且您有一行的开始日期=2020-01-05,结束日期为2020-01-15,该怎么办?这也应该包括在内吗?为什么第二排不包括在2020-01年?
WHERE end_date >= TO_DATE('2019-08', 'YYYY-MM') AND
      start_date < TO_DATE('2019-08', 'YYYY-MM') + INTERVAL '1 MONTH'