有时候,我们知道一周的某一天,但需要这周起始是那一天,结束是那一天。在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;上个实际运行效果图:

