问题不清楚,但假设要求是to create month end dates between start and end dates with the given interval as months
这种情况下的第一个例子不正确,它应该以6/1/2018而不是5/1/2018开头
我的 SQL 是
WITH params(start_dt, end_date, interval_) AS
(SELECT '2018-06-01'::date,
'2019-12-31'::date,
'2'::integer)
, dates AS
(SELECT ADD_MONTHS(start_dt, n * interval_) - 1 AS dt
FROM params ,
(SELECT generate_series(1, ((datediff(month, start_dt::date, end_date::date) / interval_) + 1)) n
FROM params) )
SELECT to_char(dt,'MM/DD/YY') dt
FROM dates, params
WHERE dt BETWEEN start_dt AND end_date
这个的输出是
dt
07/31/18
09/30/18
11/30/18
01/31/19
03/31/19
05/31/19
07/31/19
09/30/19
11/30/19
第二个例子
WITH params(start_dt, end_date, interval_) AS
(SELECT '2018-01-01'::date,
'2019-12-31'::date,
'3'::integer)
, dates AS
(SELECT ADD_MONTHS(start_dt, n * interval_) - 1 AS dt
FROM params ,
(SELECT generate_series(1, ((datediff(month, start_dt::date, end_date::date) / interval_) + 1)) n
FROM params) )
SELECT to_char(dt,'MM/DD/YY') dt
FROM dates, params
WHERE dt BETWEEN start_dt AND end_date
输出是
dt
03/31/18
06/30/18
09/30/18
12/31/18
03/31/19
06/30/19
09/30/19
12/31/19