oracle周数怎么排 oracle 周

oracle周数计算

oracle周数计算

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:国际域名空间、网页空间、营销软件、网站建设、通化县网站维护、网站推广。

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

作者: keyneslin()

发表于: :

分类: ORACLE

出处:

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

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

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

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

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

公式 每周第一天  date + 周 *

每周最后一天 date + 周 *

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

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

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

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

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

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

公式 每周第一天  date + 周 *

每周最后一天 date + 周 *

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

:asdb:WFselect to_date( yyyymmdd ) + * to_date( yyyymmdd ) + * from dual;

TO_DATE( TO_DATE(

JAN JAN

:asdb:WFselect to_date( yyyymmdd ) + * to_date( yyyymmdd ) + * from dual;

TO_DATE( TO_DATE(

APR APR

Elapsed: : :

验证如下

:asdb:WFselect 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:WFselect 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:WFselect 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:WFselect 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:WFselect 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:WFselect 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:WFselect 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:WFselect 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:WFselect 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:WFselect 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: : :

lishixinzhi/Article/program/Oracle/201311/18269

Oracle计算周数的几种方式

比如星期一到星期天算一周 查2011年7月完整周数 select max(count1) - 1 from (SELECT count(1) count1 FROM DUAL WHERE TO_CHAR(ADD_MONTHS(LAST_DAY(to_date('201107', 'yyyyMM')), -1) + LEVEL, 'DAY') = '星期一' CONNECT BY LEVEL

在oracle中,怎么把时间按每周分组啊,数据库中存的是一个固定的时间,请教各位大虾指点指点。

oracle的date时间类型是 '2011-7-30 14:31'这种形式

因此就算你用extract()或者to_char()截取时间段也没有没办法区分周

我建议的方法是新建一个字段week,从时间里截取月和日去计算周,可以从每月的第一天00:00开始算,完成7天算一周。

也就是说这个字段week下要有至少4条记录,分别是每一个月的第一二三四周。

然后根据这个字段用 group by week 去分组就行了。

ORACLE星期排序

你的表字段是

week

--------

周一

周二

周三

select week,

case when week='周一' then 1

when week='周二' then 2

when week='周三' then 3 end wk

from table order by wk


分享文章:oracle周数怎么排 oracle 周
网页路径:http://azwzsj.com/article/hposjp.html