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