select max(years) || '年第' || week || '周',count(1)
from (select to_char(Y_TIME, 'yyyy') years,
to_char(Y_TIME+to_char(trunc(Y_TIME,'yyyy'),'d')-2,'WW') week
from T_B) group by week order by max(years),week
其中Y_TIME为你数据的时间字段,T_B为你要查询的表,查出每周数据量
查询结果示例如下:
2012年第31周 340
2012年第42周 6
2012年第43周 35
2012年第46周 7655
2013年第03周 18
2013年第04周 4
2013年第05周 2
2013年第06周 8
这个算法的结果依赖于当前系统时间是什么时候…假设按照你说的,当前系统时间是星期六,那么它计算的结果就是说这个星期六是本月的第几个星期六。就拿12月来说,12月1日是星期六哦,所以你在12月1号查的时候它结果会是1哦,但是12月2日的时候,你查周日,它的结果仍然是1哦,因为是本月第一次出现的星期日哦!只有当你查12月8日的时候,才开始出现结果2哦…其实你可以在系统里选一些特殊的时间查一下就可以发现规律
其实最简单的理解 是每月的第三个周五必然在 15号到21号之间 1号是周五时15号就是第三个周五,如果1号是周六 那21号就是第三个周五。
所以
SELECT CASE
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+15,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+15
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+16,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+16
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+17,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+17
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+18,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+18
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+19,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+19
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+20,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+20
WHEN TO_CHAR(TRUNC(SYSDATE,'MON')+21,'DAY')= '星期五' THEN TRUNC(SYSDATE,'MON')+21
END A
FROM
DUAL
这样虽然麻烦 但是不依靠任何表。而且计算简单,容易理解。
select SUNDAY,SATURDAY from
(select
sundaythe_week,decode(sign(sundaythe_day-saturdaythe_day),-1,sundaythe_day,sundaythe_day-7)
sunday,saturdaythe_day saturday from
(select to_char(wwm,'WW') the_week,to_char(wwm,'D') the_daynum,wwm the_day from (select
trunc(sysdate, 'MM')+rownum-1 as wwm from user_objects where rownum < 366) where
to_char(wwm,'D')=1 ) sunday,
(select to_char(wwm,'WW') the_week,to_char(wwm,'D') the_daynum,wwm the_day from (select
trunc(sysdate, 'MM')+rownum-1 as wwm from user_objects where rownum < 366) where
to_char(wwm,'D')=7 ) saturday
where sundaythe_week=saturdaythe_week) a
where the_week=32
以上就是关于如何将oracle数据库中的数据按星期算出每个全部的内容,包括:如何将oracle数据库中的数据按星期算出每个、在oracle中怎么计算当天是本月的第几周、Oracle获得本月第3个星期五等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)