oracle 周的计算问题

pdw2009 2008-12-11 06:17:59
我所知道的oracle两种周计算方式:
select to_char(to_date('2005-01-01','yyyy-mm-dd'),'yyyy-iw') from dual //以实期星期几计算,但一年的第一周是从该年第一个星期一开始

select to_char(to_date('2005-01-01','yyyy-mm-dd'),'yyyy-ww') from dual; //从一年的第一天开始以7求模得到周数,如(2005-01-01至2005-01-07为第一周,2005-01-08至2005-01-15为第二周的计算模式)


现在的周计算业务方式是:
从该年1月1号(不考虑属星期几)开始至该年该一个星期日为第一周,第二周是从该年第一个星期开始算,我现在要以周为单位分别统计,请问有什么快捷的解决办法?

在线等待,希望大能告诉我oracle更多的周计算方式...

谢谢
...全文
644 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjq521521 2008-12-13
  • 打赏
  • 举报
回复
严重关注中...
zhangyong369 2008-12-12
  • 打赏
  • 举报
回复
to_char(date,'iw')按照标准周的划分
hugh_9 2008-12-12
  • 打赏
  • 举报
回复
自己编写函数判断
yf520gn 2008-12-12
  • 打赏
  • 举报
回复
找来找去不如写一个~~
看看这个是不是你需要的!

create or replace function testweek(rq in date) return varchar2
is week varchar2(10);

strrq varchar2(10);
yyyy varchar2(10);
begin
select to_char(rq,'yyyy') into yyyy from dual;
select to_char(rq,'iw') into week from dual;
select to_char(rq,'mm') into strrq from dual;
if week='53' and strrq='01' then
week:=1;
else week:=week+1;
end if;
week:=yyyy||'-'||week;

return(week);

end ;
zhangyong369 2008-12-11
  • 打赏
  • 举报
回复
我举过2005例子:
2005-01-01是周六,2005-01-02是周日,客户的要求是这两天做为05年的第一周了,接下来第2周的算法,是以自然周1至周日作为一周。

那么2005年最后一周只算到2005-12-31(是周六),那么最后一周就只有6天了
chen3512786 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 hebo2005 的回复:]
标准周的算法是如果1号是周四,则算做上一年年最后周,如果是周三,算做新一年的第一周
所以你可以考虑先判断是1号是周几,如果是周日至周三,则按自然周算,如果是周四到周六,则自然周加1
[/Quote]

我测试了下好像是1号是周一到周四按自然周算,周五到周日自然周加1。。
hebo2005 2008-12-11
  • 打赏
  • 举报
回复
标准周的算法是如果1号是周四,则算做上一年年最后周,如果是周三,算做新一年的第一周
所以你可以考虑先判断是1号是周几,如果是周日至周三,则按自然周算,如果是周四到周六,则自然周加1
pdw2009 2008-12-11
  • 打赏
  • 举报
回复
等明天.....
pdw2009 2008-12-11
  • 打赏
  • 举报
回复
我举过2005例子:
2005-01-01是周六,2005-01-02是周日,客户的要求是这两天做为05年的第一周了,接下来第2周的算法,是以自然周1至周日作为一周。

那么2005年最后一周只算到2005-12-31(是周六),那么最后一周就只有6天了
yf520gn 2008-12-11
  • 打赏
  • 举报
回复
第二周是从该年第一个星期开始算
这句话是什么意思?
pdw2009 2008-12-11
  • 打赏
  • 举报
回复
select to_char(sysdate,'YYYY-FMWW') from dual;

这种计算方式也我想要的,我想要的算法:

该年1月1号(不考虑属星期几)开始至该年该一个星期日为第一周,
第二周是从该年第一个星期开始算(这与iw算法相同)
一年的最后一周以该年的12月31号做为截止
yf520gn 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 pdw2009 的回复:]
执行select to_char(sysdate,'FMWW') from dual;
得到的50,
有没有一个参数使其得到的结果是2008-50?
[/Quote]

--try it
select to_char(sysdate,'YYYY-FMWW') from dual;
pdw2009 2008-12-11
  • 打赏
  • 举报
回复
执行select to_char(sysdate,'FMWW') from dual;
得到的50,
有没有一个参数使其得到的结果是2008-50?
yf520gn 2008-12-11
  • 打赏
  • 举报
回复

--try it
select to_char(sysdate,'FMWW') from dual;
pdw2009 2008-12-11
  • 打赏
  • 举报
回复
select to_char(to_date('2008-12-31','yyyy-mm-dd'),'yyyy-iw') from dual
得到的结果是
2008-01

select to_char(to_date('2006-01-01','yyyy-mm-dd'),'yyyy-iw') from dual
2006-52

这标准算法不是我想要的
hebo2005 2008-12-11
  • 打赏
  • 举报
回复
to_char(date,'iw')按照标准周的划分

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧