设为首页 收藏本站
查看: 1238|回复: 0

[经验分享] oracle 日期时间函数使用总结

[复制链接]

尚未签到

发表于 2016-8-12 07:02:34 | 显示全部楼层 |阅读模式
一、常用日期数据格式
1. 获取年的最后一位, 两位, 三位, 四位
select to_char(sysdate,'Y') from dual; -- 获取年的最后一位
select to_char(sysdate,'YY') from dual; -- 获取年的最后两位
select to_char(sysdate,'YYY') from dual; -- 获取年的最后三位
select to_char(sysdate,'YYYY') from dual; -- 获取年的最后四位

2. 获取当前季度
select to_char(sysdate,'Q') from dual; -- 1 ~ 3月为第一季度, 2表示第二季度。

3. 获取月份数
select to_char(sysdate,'MM') from dual; -- 五月为05

4. 获取月份的罗马表示
select to_char(sysdate,'RM') from dual; -- 五月为V

5. 获取用9个字符长度表示的月份名
select to_char(sysdate,'Month') from dual; -- 五月为5月

6. 获取当年第几周
select to_char(sysdate,'WW') from dual; -- 2014年5月20日为2014年第20周

7. 获取本月第几周
select to_char(sysdate,'W') from dual; -- 2014年5月20日为5月第3周

8. 获取当年第几天
select to_char(sysdate,'DDD') from dual; -- 2014年5月20日为2014年第140天

9. 获取当月第几天
select to_char(sysdate,'DD') from dual; -- 2014年5月20日为5月第20天

10. 获取一周第几天
select to_char(sysdate,'D') from dual; -- 2014年5月20日为一周第三天( 从周日算起 )

11. 获取中文的星期
select to_char(sysdate,'DY') from dual; -- 2014年5月20日为星期二

12. 获取12进制小时数
select to_char(sysdate,'HH') from dual; -- 22:36分用12小时制计时为10点

13. 获取24进制小时数
select to_char(sysdate,'HH24') from dual; -- 22:36分用24小时制计时为22点

二、常用时间函数
1. trunc(d, [ ? ]),代码如下:

select sysdate S1, -- 返回当前日期,有时分秒
trunc(sysdate) S2, -- 返回当前日期,无时分秒
trunc(sysdate, 'year') YEAR, -- 返回当前年的1月1日,无时分秒
trunc(sysdate, 'month') MONTH, -- 返回当前月的1日,无时分秒
trunc(sysdate, 'day') DAY, -- 返回当前星期的星期天,无时分秒
trunc(sysdate, 'Q') QUARTER, -- 返回当前季度的1日,无时分秒
trunc(sysdate, 'D') WEEK -- 返回当前星期的星期天,无时分秒
from dual
 2. round(d, [?]) 舍入到最接近的日期

select sysdate S1,
round(sysdate) S2,
round(sysdate, 'year') YEAR, -- 舍入到最接近的年 2014/1/1
round(sysdate, 'month') MONTH, -- 舍入到最接近的月 2014/6/1
round(sysdate, 'day') DAY -- 舍入到最接近的星期日 2014/5/18
from dual
 3. last_day(d) 获取包含d的月最后一天的日期
select last_day(sysdate) from dual; -- 获取本月最后一天: 2014/5/31 22:46:01 
4. add_months(d, n) 日期d往后推n个月

select add_months(sysdate,2) from dual; -- 日期往后推2个月: 2014/7/20 22:49:36
5. next_day(d, day)
select next_day(sysdate,2) from dual; -- 日期sysdate之后的第一周中, 指定星期的第2天是什么日期
注:如果sysdate日期为周日(每周的第一天从周日开始算起),则如下图所示:
select next_day(to_date('2014-05-25','yy-MM-dd'),1) from dual;     //'2014-05-25'为周日,运行结果日期为‘2014-06-01’,给日期页为周日;
select next_day(to_date('2014-05-25','yy-MM-dd'),2) from dual;     //运行结果日期为‘2014-05-26’ 
select next_day(to_date('2014-05-25','yy-MM-dd'),3) from dual;     //运行结果日期为‘2014-05-27’ 
select next_day(to_date('2014-05-25','yy-MM-dd'),4) from dual;     //运行结果日期为‘2014-05-28’ 
select next_day(to_date('2014-05-25','yy-MM-dd'),5) from dual;     //运行结果日期为‘2014-05-29’ 
select next_day(to_date('2014-05-25','yy-MM-dd'),6) from dual;     //运行结果日期为‘2014-05-30’
select next_day(to_date('2014-05-25','yy-MM-dd'),7) from dual;     //运行结果日期为‘2014-05-31’  
6. months_between(f,s) 日期f和s间相差月数
select months_between(sysdate,to_date('2007-04-12','yyyy-mm-dd'))from dual; -- 85.2889874551971
7. 获取两个日期间的天数
select floor(sysdate - to_date('20140405','yyyymmdd')) from dual;
三、综合用法
1. 获取上个月最后一天
select to_char(add_months(last_day(sysdate),-1),'yyyy-MM-dd') lastDay from dual;
2. 获取上个月的今天
select to_char(add_months(sysdate,-1),'yyyy-MM-dd') preToday from dual;
3. 获取上个月的第一天
select to_char(add_months(last_day(sysdate)+1,-2),'yyyy-MM-dd') firstDay from dual;
4. 获取某月中所有周五的具体日期

select to_char(b.a, 'YY-MM-DD')
from (select trunc(sysdate, 'mm') + rownum - 1 a
from dba_objects
where rownum < 32) b
where to_char(b.a, 'day') = '星期五';
 5. 查找2002-02-28至2002-02-01间除了星期一和七的天数

select count(*)
from (select rownum - 1 row_num
from all_objects
where rownum <= to_date('2002-02-28', 'yyyy-mm-dd') -
to_date('2002-02-01', 'yyyy-mm-dd') + 1)
where to_char(to_date('2002-02-01', 'yyyy-mm-dd') + row_num - 1, 'D') not in('1', '7');
 

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-256589-1-1.html 上篇帖子: Oracle应用——DBMS_SQL封装过程 下篇帖子: Oracle 使用sign函数分组小记
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表