Search code examples
sqlpostgresqldaterecursive-query

how to wite the date fuctionality for below output


I want the output like this for whole year:

 Jan 01 - Jan 14 - 2021
 Jan 15 - Jan 28 - 2021
 Jan 29 - Feb 11 - 2021
 Feb 12 - Feb 25 - 2021
 Feb 26 - Mar 11 - 2021
 Mar 12 - Mar 25 - 2021
 Mar 26 - Apr 08 - 2021
 Apr 09 - Apr 22 - 2021
 Apr 22 - May 06 - 2021
 May 07 - May 20 - 2021
 May 21 - Jun 03 - 2021
 Jun 04 - Jun 17 - 2021
 Jun 18 - Jul 01 - 2021
 Jul 02 - Jul 15 - 2021
 Jul 16 - Jul 29 - 2021
 Jul 30 - Aug 12 - 2021
 Aug 13 - Aug 26 - 2021
 Aug 27 - Sep 09 - 2021
 Sep 10 - Sep 23 - 2021
 Sep 24 - Oct 07 - 2021
 Oct 08 - Oct 21 - 2021
 Oct 22 - Nov 04 - 2021
 Nov 05 - Nov 18 - 2021
 Dec 19 - Dec 02 - 2021
 Dec 03 - Dec 16 - 2021
 Dec 17 - Dec 30 - 2021

Solution

  • One option uses generate_series():

    select d.dt dt_start, d.dt + '13 days'::interval dt_end
    from generate_series(
        date_trunc('year', current_date), 
        date_trunc('year', current_date) + '1 year'::interval - '13 days'::interval,
        '14 days'::interval
    ) d(dt)
    order by dt_start