`
javahigh1
  • 浏览: 1223322 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

oracle SQL 星期 算法

 
阅读更多

美国人把周日当成一周的开始周六当成周结束,而我们常常需要将周一当成一周的开始,周日当成一周结束。在SQL操作中可能会遇到这类计算,例如,统计上周一到上周日的订单数量。
计算方法如下:


方法:
充分利用trunc函数和next_day函数:

next_day(date,'day') :给出日期date和星期x(周日 x=1 周一 x=2 周二 x=3 ...周六=7)之后计算下一个星期的日期。

trunc 按照指定的精度进行舍入,注意这个函数是直接截断,和round函数有区别

例子:
select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)

----------- ------------ ----------- ------------

56 -55 55 -55



计算方法:

本周:

周一:trunc(next_day(sysdate - 8, 1) + 1)
周二:trunc(next_day(sysdate - 8, 1) + 2)
周三:trunc(next_day(sysdate - 8, 1) + 3)
周四:trunc(next_day(sysdate - 8, 1) + 4)
周五:trunc(next_day(sysdate - 8, 1) + 5)
周六:trunc(next_day(sysdate - 8, 1) + 6)
周日:trunc(next_day(sysdate - 8, 1) + 7)

可以看出,要计算某周周一的起始日期,那么就直接使用周一到周日中任何一天的日期date替换这里的sysdate即可计算出日期所在周一和周日。


应用 :
统计上周成功订单总数:
  1. selectcount(*)fromordersowhereo.gmt_create>=trunc(next_day(sysdate- 8,1)-6)
  2. ando.gmt_create<trunc(next_day(sysdate- 8,1)+1)
  3. ando.status=5

补充:JAVA中得到本周一,本周日的方法如下:
  1. Calendarc=Calendar.getInstance();
  2. c.setFirstDayOfWeek(Calendar.MONDAY);//指定周一为一周第一天
  3. c.setTime(newDate());
  4. c.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY);//本周周一的时间
  5. c.set(Calendar.HOUR_OF_DAY,0);
  6. c.set(Calendar.MINUTE,0);
  7. c.set(Calendar.SECOND,0);
  8. Datemonday=c.getTime();//当前周一的日期
very easy.关键就是要设置c.setFirstDayOfWeek(Calendar.MONDAY);


bugfix: 之前求周一是
trunc(next_day(sysdate - 7, 1) + 1) 这个方法无法避免周日这一天计算错误(周日临界问题)。因此修改为
trunc(next_day(sysdate - 8, 1) + 1) ,这样就可以按照中国人的习惯 周一~周日 都算 本周。



分享到:
评论

相关推荐

    [自己开发]一款非常好用的抓取Oracle数据库SQL语句的工具

    Oracle SQL Profiler,自己设计算法写的一款非常好用的抓取Oracle数据库SQL语句的工具,可以再没有源码的情况下监控ORACLE数据库服务器的v$sqlarea视图抓取出从点击开始按钮到点击结束按钮期间执行过的SQL语句。...

    五子棋--oracle版

    采用oracle数据库的PLSQL编程,其中包含大量的过程和函数以及数据类型,可以学得大量oracle编程的技巧

    Oracle 数值求解优化算法

    用Oracle PL/SQL 语言开发的运筹学(最优化)算法.目前包括线性方程组求解,线性规划最优化求解等功能,经过了大量数据测试验证,附带详细使用说明,新功能正在继续开发调试之中,敬请各位使用并不吝赐教. A.运筹学算法...

    Oracle_SQL_PL/SQL书写规范性能优化技巧.doc

    3、 对较为复杂的sql语句加上注释,说明算法、功能。 ...... 二、 书写优化性能建议  1、避免嵌套连接。例如:A = B and B = C and C = D  2、where条件中尽量减少使用常量比较,改用主机变量

    sql server 的数据加密与注入

    关于sql server 的数据加密方法的简单介绍,和sql server 注入法的简单介绍。

    ERP U9 BOM展开SQL脚本

    ERP U9 BOM展开SQL脚本,U9ERP可以直接使用

    oracle破解教程

    密码不能包含"SELECT","DELETE","CREATE"这类的Oracle/SQL 关键字。 2 Oracle 的弱算法加密机制:两个相同的用户名和密码在两台不同的Oracle 数据库机器中,将具有相同的 哈希值。这些哈希值存储在SYS.USER$表中。...

    Oracle SQL实用讲解,最基本最实用的相关讲解

    WITH –-小九九算法 t_base AS (SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL ), t_join AS (SELECT a.lv lv_a, b.lv lv_b, to_char(b.lv) || 'X' || to_char(a.lv) || '=' || rpad(to_char(a.lv * b.lv), 2...

    时间区间取并集Orace存储过程算法实现

    区间[am,bm]加到并集区间[an,bn]∪[an+1 ,bn+1]∪[an+2, bn+2]的处理方法

    Hash join算法原理

    Hash join算法原理 详细讲述了oracle sql语句的连接方式 对于sql调优提高有很大帮助

    图书管理系统SQL

    完整的图书管理系统Sql语句,包含存储过程,触发器,详细sql算法

    基于Oracle的实时数据存储访问

    重点探讨了实时数据的压缩存储,并给出采用Oracle数据库内部语言PL /SQL实现数据压缩算法,由于数据的存储和访问中引进了数据压缩技术,在低频率和点数较少时,该技术可作实时数据库的替代方案. 给出的方法在Oracle 10 ...

    Oracle_Database10g_性能调整与优化-第10章_使用PLSQL提高性能

    一个PL/SQL对象将会一直保存在SGA共享池里,直到根据最近最少使用(Least Recently Used,简写为LRU)算法将该对象设置为失效。因此,如果有任何程序需要调用对象,只要该对象还没有失效,它就不必被重新加载到SGA共享...

    SQL语句 注入猜解hack工具

    主要针对一些没有错误返回信息的网站的表结构猜解(当然,如果有错误返回这个工具也适用,只是没必要使用这个工具了,因为有更好更快捷的工具),尤其是Java+Oracle,PHP+MySQL以及一部分ASP+SQLServer的网站,具体...

    怀晓明-算法为王的SQL优化

    2015 Oracle 技术嘉年华(OTN)分会场6怀晓明-算法为王的SQL优化

    论文研究-Oracle用户SQL会话还原方法研究.pdf

    提出了局部歧义词网格的概念,针对汉语分词中的覆盖歧义,提出了一种使用迭代算法训练覆盖歧义词典的算法,得到覆盖歧义候选词条词典。在此基础上提出了一种基于局部歧义词网格的、能够检测汉语分词过程中产生的组合...

    SqlServer函数_四舍六入五成双

    四舍六入五成双:四舍六入五考虑,五后非零就进一,五后皆零看奇偶,五前为偶应舍去,五前为奇要进一。 注:修约时看保留小数的后一位为5时进行修约,其他按四舍五入情况。 修约:五后皆零看奇偶,修约看5前面那一...

    Oracle Database SQL语句处理步骤

    一、解析  1、语法检查  sql语句解析的时候,先执行语法检查。看语句是否符合规范。...  然后,数据库使用hash算法为每个sql语句生成hash值。那是sql_id v$sql.sql_id.(sql语句shared pool check当匹配到了相

    Python操作Oracle数据库的简单方法和封装类实例

    本文实例讲述了Python操作Oracle数据库的简单方法和封装类。分享给大家供大家参考,具体如下: 最近工作有接触到Oracle,发现很多地方用Python脚本去做的话,应该会方便很多,所以就想先学习下Python操作Oracle的...

Global site tag (gtag.js) - Google Analytics