Select 两个日期之间的天数属于给定月份的数据

Select data where days between two dates are part of a given month

我的数据如下所示,我需要显示 id,其中 date1 和 date2 之间的间隔是给定 month/year 参数的一部分。 例如:对于 2018 年 7 月,我需要从 1 到 7 的 ID。

date1       date2           id  
----------  ----------  --------
2017-11-01  2018-08-28         1
2018-06-05  2018-07-05         2
2018-06-05  2019-05-07         3
2018-06-05  2018-08-08         4
2018-07-01  2018-07-31         5
2018-07-07  2018-07-15         6
2018-07-27  2018-08-05         7
2018-06-01  2018-06-07         8
2018-08-03  2018-09-01         9

解决方法很简单

SELECT
id
FROM
YOUR_TABLE
WHERE
date1<=YOUR_DATE_END_OF_MONTH AND date2>=YOUR_DATE_START_OF_MONTH

例如2018 年 7 月

SELECT
id
FROM
YOUR_TABLE
WHERE
date1<='2018-07-31' AND date2>='2018-07-01'

或者如果您不需要计算该月的第一个结束日(但如果 date1 和 date2 存在,则不使用任何索引)

SELECT
id
FROM
YOUR_TABLE
WHERE
EXTRACT(YEAR FROM date1)*12 + EXTRACT(MONTH FROM date1)<=2018*12 + 7 
AND EXTRACT(YEAR FROM date2)*12 + EXTRACT(MONTH FROM date2)>=2018*12 + 7