选择两个日期之间的天是给定月份的一部分的数据

时间:2018-07-12 01:26:41

标签: sql firebird

我的数据如下所示,我需要显示id,其中date1和date2之间的间隔是给定月/年参数的一部分。 例如:对于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

1 个答案:

答案 0 :(得分:1)

解决方案很简单

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