Oracle中日期处理用到的函数整理

1.trunc函数
1.1处理日期
/**************日期********************/
1.select trunc(sysdate) from dual --2013-01-06 今天的日期为2013-01-06
2.select trunc(sysdate, 'mm') from dual --2013-01-01 返回当月第一天.
3.select trunc(sysdate,'yy') from dual --2013-01-01 返回当年第一天
4.select trunc(sysdate,'dd') from dual --2013-01-06 返回当前年月日
5.select trunc(sysdate,'yyyy') from dual --2013-01-01 返回当年第一天
6.select trunc(sysdate,'d') from dual --2013-01-06 (星期天)返回当前星期的第一天
7.select trunc(sysdate, 'hh') from dual --2013-01-06 17:00:00 当前时间为17:35 
8.select trunc(sysdate, 'mi') from dual --2013-01-06 17:35:00 TRUNC()函数没有秒的精确
1.2处理数字
/***************数字********************/
/*
TRUNC(number,num_digits) 
Number 需要截尾取整的数字。 
Num_digits 用于指定取整精度的数字。Num_digits 的默认值为 0。
TRUNC()函数截取时不进行四舍五入
*/
9.select trunc(123.458) from dual --123
10.select trunc(123.458,0) from dual --123
11.select trunc(123.458,1) from dual --123.4
12.select trunc(123.458,-1) from dual --120
13.select trunc(123.458,-4) from dual --0
14.select trunc(123.458,4) from dual --123.458
15.select trunc(123) from dual --123
16.select trunc(123,1) from dual --123
17.select trunc(123,-1) from dual --120
2.求上年末,上月末,上季末
-- 上年末
select to_char(trunc(sysdate,'YEAR')-1,'YYYY-MM-DD') as "上年末" from dual;
-- 上月末
select to_char(trunc(sysdate,'MONTH')-1,'YYYY-MM-DD') as "上月末" from dual;
-- 上季末
select to_char(trunc(sysdate,'Q')-1,'YYYY-MM-DD') as "上季末" from dual;
3.取月初,月末,季初,季末及年初,年末时间总结
3.1.取周的开始时间和结束时间:
      开始时间(以星期一为开始时间):
     SQL>       select  trunc(sysdate,'D')+1  from  dual;

     结束时间(以星期日为结束时间):
     SQL>       select trunc(sysdate,'D')+7   from dual;
3.2.取月的开始时间和结束时间:
     月初时间:
     SQL>      select  trunc(sysdate,'MM')  from dual;

     月末时间:
     SQL>       select last_day(sysdate)   from dual;
3.3.取季的开始时间和结束时间:
     季初时间:
     SQL>      select trunc(sysdate,'Q') from dual;

     季末时间:
     SQL>       select add_months(trunc(sysdate,'Q'),3)-1 from dual;
--本年第一季度起始日期
SELECT TRUNC((DATE '2018-1-1'), 'yy') FROM dual
--本年第一季度截止日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-1-1'), 'yy'),3)-1 FROM dual

--本年第二季度起始日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-1-1'), 'yy'),3) FROM dual
--本年第二季度截止日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-1-1'), 'yy'),6)-1 FROM dual

--本年第三季度起始日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-1-1'), 'yy'),6) FROM dual
--本年第三季度截止日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-1-1'), 'yy'),9)-1 FROM dual

--本年第四季度起始日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-11-1'), 'yy'),9) FROM dual
--本年第四季度截止日期
SELECT ADD_MONTHS(TRUNC((DATE '2018-1-1'), 'yy'),12)-1 FROM dual
3.4.取年的开始时间和结束时间:
     年初时间:
     SQL>     select trunc(sysdate,'yyyy') from dual;

     年末时间:
     SQL>       select add_months(trunc(sysdate,'yyyy'),12)-1 from dual;
4.查询当前时间为周月年中的第几天
4.1查询当天为周几?
-- 查询当前日期是某个星期的第几天? 【老外周天为第一天】
select to_char(sysdate,'d') from dual
-- 查询当前日期是某个星期的第几天? 【中国方式:数字】
select to_char(sysdate - 1,'d') from dual;
-- 查询当前日期是某个星期的第几天? 【中国方式:汉字显示】
select to_char(sysdate,'day') day from dual;
-- 查询当前日期是某个星期的第几天? 【中国方式:英文显示】
select to_char(sysdate,'day','NLS_DATE_LANGUAGE=AMERICAN') day from dual;

/*
--当然你也可以直接改变当前 session 的语言设置:
SQL> ALTER SESSION SET NLS_DATE_LANGUAGE='AMERICAN';
会话已更改。
SQL> select to_char(sysdate,'day') day from dual;
*/
4.2查询当天为几月,几年,月的几天以及当年发生天数?
-- 年初到当前日期已发生天数
select to_char(sysdate,'DDD') from dual;
select to_char(sysdate,'DDD') as "一年过去多少天",to_char(sysdate,'DD') as "在一个月中的第几号",to_char(sysdate,'D') as "在一周的第几天(美方式)" from dual;
-- 判断当前日期是几月
select extract(month from sysdate) from dual;
-- 判断当前日期是几年
select extract(year from sysdate) from dual;
-- 判断当前日期是月的第几天
select extract(day from sysdate) from dual;
*/
5.两个时间点的相减或者时间段判断
5.1oracle 两个时间相减
-- 两个日期的间隔时间【天】
select months_between('19-12月-1999','19-3月-1999') mon_between from dual; 
-- 两个日期的间隔时间【月】 months_between
select months_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) from dual; 
5.2 当前日期是否在某个时间段之间
-- 当前日期是否在某个时间段之间
--select * from 表 where 日期字段 between 开始日期 and 结束日期;
select * from dual where '2019-06-12' between TO_CHAR(trunc(sysdate,'yyyy'),'YYYY-MM-DD') and to_char(last_day(sysdate),'YYYY-MM-DD');

大体就是这些了,用的时候收集起来查看,不需要一定要记住!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值