Oracle查询优化-07日期运算
7.1 加减日、月、年
在oracle中,date类型可以直接加减天数,而加减月份要用add_months函数.
select a.hiredate 雇用日期,a.hiredate + 5 加5天,a.hiredate - 5 减5天,add_months(hiredate, 5) 加5个月,add_months(hiredate, -5) 减5个月,add_months(hiredate, 5 * 12) 加5年,add_months(hiredate, -5 * 12) 减5年from emp a where rownum <=1;雇用日期 加5天 减5天 加5个月 减5个月 加5年 减5年
----------- ----------- ----------- ----------- ----------- ----------- -----------
1980-12-17 1980-12-22 1980-12-12 1981-05-17 1980-07-17 1985-12-17 1975-12-17
7.2 加减时、分、秒
上面讲过,date可以直接加减天数,那么1/24就是一小时,分钟与秒的加减类同。
select a.hiredate,a.hiredate - 5 / 24 / 60 / 60 减5秒,a.hiredate + 5 / 24 / 60 / 60 加5秒,a.hiredate - 5 / 24 / 60 减5分钟,a.hiredate + 5 / 24 / 60 加5分钟,a.hiredate - 5 / 24 减5小时,a.hiredate + 5 / 24 加5小时from emp awhere rownum <= 1;
如果执行时,报错
数据库服务器端的编码和客户端字符集编码不一致。
我这边用的数据库西班牙语,不支持中文。
7.3 日期间隔之时、分、秒
SQL> select duration,duration * 24 间隔小时,duration * 24 * 60 间隔分钟,duration * 24 * 60 * 60 间隔秒from (select (max(a.hiredate) - min(a.hiredate)) as duration from emp a wherea.ename in ('ALLEN', 'WARD')) x;DURATION 间隔小时 间隔分钟 间隔秒
---------- ---------- ---------- ----------2 48 2880 172800
7.4 日期间隔之日、月、年
加减月份用函数 add_months, 而计算月份间隔就要用函数months_between
select max_hd - min_hd 间隔天,months_between(max_hd, min_hd) 间隔月,months_between(max_hd, min_hd) /12 间隔年from (select min(hiredate) min_hd, max(hiredate) max_hd from emp) x;间隔天 间隔月 间隔年
---------- ---------- ----------2348 77.1935483 6.43279569
7.5计算一年中周内各日期的次数
问题
计算一年中周内各日期(星期日、星期一 ……星期六)的次数。
解决方案
要计算一年中周内各日期分别有多少个,必须:
生成一年内的所有日期。
设置日期格式,得到每个日期对应为星期几。
计数周内各日期分别有多少个。
with x as(select level lvlfrom dualconnect by level <=(add_months(trunc(sysdate, 'y'), 12) - trunc(sysdate, 'y')))
select to_char(trunc(sysdate, 'y') + lvl - 1, 'DAY'), count(*)from xgroup by to_char(trunc(sysdate, 'y') + lvl - 1, 'DAY');
Oracle查询优化-07日期运算相关推荐
- 只是简单读了读《oracle查询优化改写》,就让我获益匪浅,想写好sql,这一本书就够了!
目录 写在前面 基础知识 空值 返回前几行 获取随机数 like 排序 union 分页(6-10条) 表关联 复制表 日期 日期加减 trunc对于日期的用法 获取时间 判断是否是闰年(只需要判断二 ...
- 在oracle中处理日期大全
在oracle中处理日期大全 TO_DATE格式 Day: dd number 12 dy abbreviated fri day spelled out friday ddspt ...
- oracle 日期 extract,ORACLE——EXTRACT() 截取日期时间的函数使用
1.截取日期的 年: --使用方法 EXTRACT(YEAR FROM DATE) SQL> SELECT EXTRACT( YEAR FROM SYSDATE ) FROM DUAL; --结 ...
- Oracle关于时间/日期的操作
在oracle中有很多关于日期的函数,如: 1.add_months()用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_mo ...
- oracle 日期转换成毫秒数,ORACLE:毫秒与日期的相互转换,获取某天的信息
毫秒转换为日期 SELECT TO_CHAR(1406538765000 / (1000 * 60 * 60 * 24) + TO_DATE('1970-01-01 08:00:00', 'YYYY- ...
- 【书评:Oracle查询优化改写】第三章
[书评:Oracle查询优化改写]第三章 BLOG文档结构图 一.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 隐含参数 _ ...
- oracle中的日期函数
Oracle的日期函数 oralce 发表于 2006-3-23 10:08:00 相信很多人都有过统计某些数据的经历,比如,要统计财务的情况,可能要按每年,每季度,每月,甚至每个星期来分别统计.那在 ...
- oracle 转number日期,oracle number型日期转date型日期
在搞数据库时,发现有这样的一个字段,类型是NUMBER(38),查看了一下里面的数据,都是这样的, 1323957678114 1321326994295 1322129306804 13221297 ...
- [FUNC]AHK有没有日期运算?比如,20-DEC-2018 减2天
AHK有没有日期运算?比如,20-DEC-2018 减2天 回答网友提问如下: ;~功能:计算日期减法 ;~作者:sunwind 1576157 ;~最新版地址:https://blog.csdn.n ...
最新文章
- C#线程同步的几种方法
- 分割数组的最大值—leetcode410
- php按照二维数组某个字段排序,PHP 二维数组根据某个字段排序
- HTML入门之003
- android widget ViewFlipper
- C# 图片反色处理 图片夜间模式
- win10 家庭版 升级专业版
- 怎么利用pytorch训练好的模型测试单张图片
- 如何在WhatsApp中设置两步验证
- 织梦后台登录出现500错误解决方案
- 5GHz超频教程:技嘉Z390 AORUS MASTER主板+酷睿i9
- 解开硬盘逻辑死锁的一种有效方法 (转)
- 乌镇互联网大会:大佬们都爱AI
- python中logging库使用总结
- Java Security(JCE基本概念)
- 实现QT打开Word文档
- android 老年模式 oppo,善用手机“老人模式”,OPPO这几大核心功能很关键
- android添加任务到最近任务列表
- 有一种情愫,它不属于暧昧
- (翻译)适当挑战(Appropriate challenge)
热门文章
- 为什么要使用 using namespace std
- Markovdecisionprocesses_Discretestochasticdynamicprogramming下载
- 如何将html表单转换成url,JS表单传值和URL编码转换
- 时间复杂度为on的排序算法_快速排序的时间复杂度为啥是为O(nlogn)
- Leetcode 142. 环形链表 II (每日一题 20210902)
- 知识图谱学习笔记-风控算法介绍
- 文巾解题 20有效的括号
- 文巾解题1738. 找出第 K 大的异或坐标值
- 【数学建模】MATLAB应用实战系列(九十一)-熵权法应用案例(附MATLAB和Python代码)
- 机器学习算法源码全解析(二)-范数规则化之L0、L1与L2范数