PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Podział dat na podstawie roku obrotowego

Właściwie wolę rozwiązanie Andomara (z dodatkiem procesów, które automatycznie wypełniają tabelę Periods), ale dla zabawy jest to rozwiązanie, które tego nie wymaga.

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;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ILIKE Dopasuj granice słów PostgreSQL 9

  2. Wiele sprzężeń lewostronnych w wielu tabelach w jednym zapytaniu

  3. impas postgresql

  4. Postgresql - jedna baza danych dla wszystkich lub jedna baza danych na klienta

  5. F# Połącz SQLProvider z Postgres