PostgreSQL-计算指定时间所在周的开始与结束日期

    有时候,我们知道一周的某一天,但需要这周起始是那一天,结束是那一天。在PostgreSQL及绝大多数语言中,都没有提供这么一个函数,也许是用的人少吧,毕竟一般的统计报表都是日报、月报、季报或年报,周报相对较少。

    我写了两个计算指定日期所在周的开始和结束日期的函数,分享给大家。

    1、WeekStartDate 计算一周开始日期,时间为0点

CREATE OR REPLACE FUNCTION weekstartdate(adate timestamp without time zone)
  RETURNS timestamp without time zone AS
$BODY$
begin
ADate=date_trunc('day',ADate);--强制时间清零
ADate=ADate-(cast(extract(dow from ADate)-1 as character varying)||'d')::interval;
return ADate;
end;
$BODY$
  LANGUAGE plpgsql IMMUTABLE STRICT;

2、WeekEndDate 计算一周的结束日期,结果为下周一的0点

CREATE OR REPLACE FUNCTION weekenddate(adate timestamp without time zone)
  RETURNS timestamp without time zone AS
$BODY$
begin
ADate=date_trunc('day',ADate);--强制时间清零
ADate=ADate+(cast(8-extract(dow from ADate) as character varying)||'d')::interval;
return ADate;
end;
$BODY$
  LANGUAGE plpgsql IMMUTABLE STRICT;

上个实际运行效果图:

分享到: