小编典典

根据会计年度划分日期

sql

给定“ 从日期” ,“ 到日期” 和“ 会计年度”系统
,我想获得基于“会计年度”系统的给定“从”和“截止日期”内的所有拆分期限。下面用示例说明:

示例1: 会计年度系统:4月至3月

从日期:2008年1月5日到日期:2008年5月15日

根据会计年度系统,工期应分为:

Jan-05-2008 to Mar-31-2008
Apr-01-2008 to May-15-2008

示例2: 会计年度系统:4月至3月

从日期:2008年1月17日到日期:2009年5月20日

根据会计年度系统,工期应分为:

Jan-17-2008 to Mar-31-2008
Apr-01-2008 to Mar-31-2009
Apr-01-2009 to May-20-2009

我正在寻找方法/算法来解决PostgreSQL 8.2中的问题。

问候,

加纳姆


阅读 237

收藏
2021-03-23

共1个答案

小编典典

我实际上很喜欢Andomar的解决方案(添加了自动填充Periods表的流程),但出于乐趣,这里的解决方案不需要它。

CREATE TABLE your_table (start_date date, end_date date);
INSERT INTO your_table VALUES ('Jan-17-2008', 'May-20-2009');

SELECT
    GREATEST(start_date, ('04-01-'||series.year)::date) AS year_start,
    LEAST(end_date, ('03-31-'||series.year + 1)::date) AS year_end
FROM
    (SELECT
        start_date,
        end_date,
        generate_series(
            date_part('year', your_table.start_date - INTERVAL '3 months')::int,
            date_part('year', your_table.end_date - INTERVAL '3 months')::int)
    FROM your_table) AS series(start_date, end_date, year)
ORDER BY
    start_date;
2021-03-23