知识大全 oracle周数计算

Posted

篇首语:业精于勤,荒于嬉;行成于思,毁于随。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 oracle周数计算相关的知识,希望对你有一定的参考价值。

  oracle周数计算

  ===========================================================

  作者: keyneslin()

  发表于: :

  分类: ORACLE

  出处:

  

  ================================================

   日期计算 算第n周的第一天及最后一天是几号   by keynes

  ================================================

   ww的算法为每年 月 日为第一周开始 date+ 为每一周结尾

   例如 为第一周的第一天 而第一周的最后一天为 + =

   公式 每周第一天  date + 周 *

         每周最后一天 date + 周 *

  不管怎么编排格式都会跑掉 真气人 ~><~

  =========================================================================

   日期计算 算第n周的第一天及最后一天是几号   by keynes

  =========================================================================

   ww的算法为每年 月 日为第一周开始 date+ 为每一周结尾

   例如 为第一周的第一天 而第一周的最后一天为 + =

   公式 每周第一天  date + 周 *

         每周最后一天 date + 周 *

   如果以ww格式为主 第 周的起迄如下

   :asdb:WF>select to_date( yyyymmdd ) + * to_date( yyyymmdd ) + * from dual;

  TO_DATE( TO_DATE(

  

   JAN JAN

   :asdb:WF>select to_date( yyyymmdd ) + * to_date( yyyymmdd ) + * from dual;

  TO_DATE( TO_DATE(

  

   APR APR

  Elapsed: : :

   验证如下

   :asdb:WF>select to_char(to_date( yyyymmdd ) ww ) as weekn to_char(to_date( yyyymmdd ) ww ) as week to_char(to_date( yyyymmdd ) ww ) as week to_char(to_date( yyyymmdd ) ww ) as weekn from dual;

  WEEK WEEK WEEK WEEK

  

           

  Elapsed: : :

   :asdb:WF>

   iw的算法为星期一至星期日算一周 且每年的第一个星期一为第一周

   例如 为星期六 所以用iw的算法是前年的 周 而 之后才是第一周的开始

   公式 每周第一天  next_day(date) + 周 *

         每周最后一天 next_day(date) + 周 *

   如果以iw格式为主 第 周的起迄如下

   :asdb:WF>select next_day(to_date( yyyymmdd ) MONDAY )+ * as first_day next_day(to_date( yyyymmdd ) MONDAY )+ * as last_day from dual;

  FIRST_DAY LAST_DAY

  

   JAN JAN

  Elapsed: : :

   :asdb:WF>

   :asdb:WF>select next_day(to_date( yyyymmdd ) MONDAY )+ * as first_day next_day(to_date( yyyymmdd ) MONDAY )+ * as last_day from dual;

  FIRST_DAY LAST_DAY

  

   APR MAY

  Elapsed: : :

   :asdb:WF>

   验证如下

   :asdb:WF>select to_char(to_date( yyyymmdd ) iw ) as weekn to_char(to_date( yyyymmdd ) iw ) as week to_char(to_date( yyyymmdd ) iw ) as week to_char(to_date( yyyymmdd ) iw ) as weekn from dual;

  WEEK WEEK WEEK WEEK

  

           

  Elapsed: : :

  其它

   == 查今天是 本月 的第几周

  SELECT TO_CHAR(SYSDATE WW ) TO_CHAR(TRUNC(SYSDATE MM ) WW ) + AS weekOfMon from dual;

  或

  SELECT TO_CHAR(SYSDATE W ) AS weekOfMon from dual;

   == 查今天是 今年 的第几周

  select to_char(sysdate ww ) from dual;

  或

  select to_char(sysdate iw ) from dual;

  附注

  上文所提之iw及ww格式在doc内解释如下

  IW = Week of year ( or ) based on the ISO standard

  WW = Week of year ( ) where week starts on the first day of the year and continues to the seventh day of the year

  参考文件

  Format Models

  oracle周数计算(续)

  ===========================================================

  作者: keyneslin()

  发表于: :

  分类: ORACLE

  出处:

  

  本篇是接续前一篇 因有朋友(allenc)要计算oracle的周数日期起迄

  所以测试了一下

  测试结果如下

   特殊周数计算

   星期日到星期六为一周(与ww及iw算法不同)

   例 年的第一周起迄是同一天 是

   例 年的第一周起为 迄为

   计算第一周的天数

  create or replace function fdf(p_date in date) return number

  is

  begin

   检查是否传入要计算那一年的一月一日

  if to_char(to_char(p_date ddd )) <> then

  return null;

  end if;

   如果第一周的第一天刚好也是最后一天时 传回

  if to_char(p_date d ) <> then

  return (next_day(p_date SATURDAY ) p_date + );

  else

  return ;

  end if;

  exception

  when others then

  dbms_output put_line(sqlerrm);

  end;

  计算公式

  起            decode(周 计算当年的一月一日 计算当年的一月一日 + (fdf(计算当年的一月一日) + (周 )* )) as 起

  迄(第一种算法) decode(周 to_date(to_char(计算当年的一月一日 yyyy )|| || yyyymmdd ) 计算当年的一月一日 + (fdf(计算当年的一月一日) + (周 )* )) as 迄

  迄(第二种算法) decode(周 last_day(trunc(计算当年的一月一日 mm )+ ) 计算当年的一月一日 + (fdf(计算当年的一月一日) + (周 )* )) as 迄

  上面的参数部份 计算当年的一月一日 为date type 周 为number type

  传回值一律是date型态

  例如

   年第 周

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

   年第 周

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

   年第 周

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

   年第 周

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

   年第 周

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

   年第 周

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

   年第 周方法

  select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( last_day(trunc(to_date( yyyymmdd ) mm )+ ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  结果如下

   :asdb:WF> 年第 周

   :asdb:WF>select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  S_WEEK    E_WEEK

  

   JAN JAN

  Elapsed: : :

   :asdb:WF> 年第 周

   :asdb:WF>select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  S_WEEK    E_WEEK

  

   JAN JAN

  Elapsed: : :

   :asdb:WF> 年第 周

   :asdb:WF>select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  S_WEEK    E_WEEK

  

   DEC DEC

  Elapsed: : :

   :asdb:WF>

   :asdb:WF> 年第 周

   :asdb:WF>select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  S_WEEK    E_WEEK

  

   JAN JAN

  Elapsed: : :

   :asdb:WF> 年第 周

   :asdb:WF>select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  S_WEEK    E_WEEK

  

   JAN JAN

  Elapsed: : :

   :asdb:WF> 年第 周

   :asdb:WF>select decode( to_date( yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as s_week decode( to_date(to_char(to_date( yyyymmdd ) yyyy )|| || yyyymmdd ) to_date( yyyymmdd ) + (fdf(to_date( yyyymmdd )) + ( )* )) as e_week from dual;

  S_WEEK    E_WEEK

  

   DEC DEC

  Elapsed: : :

cha138/Article/program/Oracle/201311/18269

相关参考

知识大全 java日期计算简析

  今天主要学习的日期操作主要是—–获取日期字段(年月日年中的天数年中的周数等)计算两个时间的间隔日期(年月天)根据开始时间间隔时间计算结束时间    &nbs

知识大全 Oracle中与时间有关的计算

Oracle中与时间有关的计算  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracle中与时

知识大全 Oracle中实现圆周率计算(一)

Oracle中实现圆周率计算(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!今天两个同事用JA

知识大全 利用Oracle10g的MODELSQL进行行间计算(一)

利用Oracle10g的MODELSQL进行行间计算(一)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 利用Oracle10g的MODELSQL进行行间计算(二)

利用Oracle10g的MODELSQL进行行间计算(二)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 ORACLE中实现CRC32的计算函数,SOLARIS平台

ORACLE中实现CRC32的计算函数,SOLARIS平台  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一

知识大全 修改计算机名称导致Oracle的em不能用

修改计算机名称导致Oracle的em不能用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  我是因

知识大全 Oracle数据安全面面观

Oracle数据安全面面观  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  随着计算机的普及以及网

知识大全 深入解析10053事件

  事件       事件是oracle提供的用于跟踪sql语句成本计算的内部事件它能记载CBO模式下oracle优化器如何计算s

知识大全 你的Oracle数据库安全吗

你的Oracle数据库安全吗?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!随着计算机的普及以及网