——日期计算,算第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.
=================================================================================