——日期计算,算第n周的第一天及最后一天是几号。bykeynes2005.04.29
================================================
——ww的算法为每年1月1日为第一周开始,date6为每一周结尾
——例如20050101为第一周的第一天,而第一周的最后一天为200501016=20050107
——公式每周第一天:date周*7-7
——每周最后一天:date周*7-1
你会发现怎么编排格式都会跑掉。
=========================================================================
——日期计算,算第n周的第一天及最后一天是几号。bykeynes2005.04.29
=========================================================================
——ww的算法为每年1月1日为第一周开始,date6为每一周结尾
——例如20050101为第一周的第一天,而第一周的最后一天为200501016=20050107
——公式每周第一天:date周*7-7
——每周最后一天:date周*7-1
——如果以ww格式为主,第1、17周的起迄如下
127.0.0.1:asdb:WF%26gt;selectto_date('20050101','yyyymmdd')1*7-7,to_date('20050101','yyyymmdd')1*7-1fromdual;
TO_DATE('TO_DATE('
------------------
01-JAN-0507-JAN-05
127.0.0.1:asdb:WF%26gt;selectto_date('20050101','yyyymmdd')17*7-7,to_date('20050101','yyyymmdd')17*7-1fromdual;
TO_DATE('TO_DATE('
------------------
23-APR-0529-APR-05
Elapsed:00:00:00.00
——验证如下
127.0.0.1:asdb:WF%26gt;selectto_char(to_date('20050422','yyyymmdd'),'ww')asweekn,to_char(to_date('20050423','yyyymmdd'),'ww')asweek1,to_char(to_date('20050429','yyyymmdd'),'ww')asweek2,to_char(to_date('20050430','yyyymmdd'),'ww')asweekn2fromdual;
WEEKWEEKWEEKWEEK
----------------
16171718
Elapsed:00:00:00.00
127.0.0.1:asdb:WF%26gt;
——iw的算法为星期一至星期日算一周,且每年的第一个星期一为第一周,
——例如20050101为星期六,所以用iw的算法是前年的53周,而20050103之后才是第一周的开始。
——公式每周第一天:next_day(date)周*7-7
——每周最后一天:next_day(date)周*7-1
——如果以iw格式为主,第1、17周的起迄如下
127.0.0.1:asdb:WF%26gt;selectnext_day(to_date('20050101','yyyymmdd'),'MONDAY')1*7-7asfirst_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')1*7-1aslast_dayfromdual;
FIRST_DAYLAST_DAY
------------------
03-JAN-0509-JAN-05
Elapsed:00:00:00.00
127.0.0.1:asdb:WF%26gt;
127.0.0.1:asdb:WF%26gt;selectnext_day(to_date('20050101','yyyymmdd'),'MONDAY')17*7-7asfirst_day,next_day(to_date('20050101','yyyymmdd'),'MONDAY')17*7-1aslast_dayfromdual;
FIRST_DAYLAST_DAY
------------------
25-APR-0501-MAY-05
Elapsed:00:00:00.00
127.0.0.1:asdb:WF%26gt;
——验证如下
127.0.0.1:asdb:WF%26gt;selectto_char(to_date('20050424','yyyymmdd'),'iw')asweekn,to_char(to_date('20050425','yyyymmdd'),'iw')asweek1,to_char(to_date('20050501','yyyymmdd'),'iw')asweek2,to_char(to_date('20050502','yyyymmdd'),'iw')asweekn2fromdual;
WEEKWEEKWEEKWEEK
----------------
16171718
Elapsed:00:00:00.00
其它:
——==查今天是"本月"的第几周
SELECTTO_CHAR(SYSDATE,'WW')-TO_CHAR(TRUNC(SYSDATE,'MM'),'WW')1AS"weekOfMon"fromdual;
或
SELECTTO_CHAR(SYSDATE,'W')AS"weekOfMon"fromdual;
——==查今天是"今年"的第几周
selectto_char(sysdate,'ww')fromdual;
或
selectto_char(sysdate,'iw')fromdual;
附注:
上文所提之iw及ww格式在doc内解释如下
IW=Weekofyear(1-52or1-53)basedontheISOstandard
WW=Weekofyear(1-53)whereweek1startsonthefirstdayoftheyearandcontinuestotheseventhdayoftheyear.
=================================================================================
posted on
浙公网安备 33010602011771号