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 周
链接地址:https://www.cdcxhl.com/article28/hposjp.html

成都网站建设公司_创新互联,为您提供网站内链网站设计网站维护移动网站建设品牌网站建设电子商务

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都seo排名网站优化