代码之家  ›  专栏  ›  技术社区  ›  bensiu CandorZ

在postgresql函数中动态生成表/数组

  •  1
  • bensiu CandorZ  · 技术社区  · 16 年前

    CREATE FUNCTION date_ranges (_start date, end date) 
      RETURNING TABLE(day_in_range date) AS...
    

    如果我调用日期范围('2010-06-01',2010-06-05') 我应该接受

    2010-06-01
    2010-06-02
    2010-06-03
    2010-06-04
    2010-06-05
    

    1 回复  |  直到 15 年前
        1
  •  5
  •   rfusca    16 年前

    如果您使用的是Postgresql 8.4:

    SELECT generate_series(_start ::timestamp,_end ::timestamp,'1 day');
    

    postgres=# SELECT generate_series('2010-06-01'::timestamp,
    postgres-# '2010-06-05'::timestamp,'1 day')::date;
     generate_series
    -----------------
     2010-06-01
     2010-06-02
     2010-06-03
     2010-06-04
     2010-06-05
    

    在旧版本上:

    SELECT '2010-06-01'::date + step FROM
    generate_series(0,'2010-06-05'::date - '2010-06-01'::date,1) AS t(step);