数据库四-oracle日期操作

日期操作


------TIMESTAMP  时间戳

-oracle常用的日期类型

-与DATE的区别是不仅可以保存日期和时间,还能保存小数秒,最高精度可以到ns(纳秒)

-数据库内部用7或者11个字节存储,精度为0,用7字节存储,与DATE功能相同,精度大于0则用11字节存储。

格式为:

       ---第1字节-第7字节:和DATE相同

       ---第8-11字节:纳秒,采用4个字节存储,内部运算类型为整型


-------SYSDATE

其本质是一个oracle的内部函数,返回当前的系统时间,精确到秒;

默认显示格式是DD-MON-RR;


------SYSTIMESTAMP

内部函数,返回当前系统日期和时间,精确到毫秒


-----TO_DATE    将字符串格式的内容转换成DATE格式的日期

select to_date('2018-3-15 10:02:30' , 'YYYY-MM-DD HH:MI:SS') FROM DUAL;  //转换前后的格式需要一致,否则报错

在日期格式字符串中凡不是英文,符号,数字的其他字符,都需要使用双引号括起来。

select to_Date('2018年3那15黑','YYYY"年"MM"那"DD"黑"') from dual;     //只要里面的文字匹配一致,日期照样可以转换成功


日期的计算

日期可以与一个数字进行加减法,这相当于加减指定的天。

两个日期可以进行减法,差为相差的天。

   查看每个员工至今入职多少天了?

     select ename, sysdate-hiredate from emp;


TO_CHAR( ) : 可以将DATE按照给定的格式转换成字符串

select to_char(SYSDATE, 'YYYY-MM-DD HH24:MI:SS' ) FROM DUAL;


日期格式当中YY是完全按照当前的系统时间来判断的;

RR是以下列图中的判定机制来实现的;

例如:
select to_char(to_date('49-07-12' ,'RR-MM-DD'),'YYYY-MM-DD')  from dual;    表示的是本世纪的49年,即2049


在以上的图表中,SYS是表示当前系统的年份,例如当前2018年,那么18是在0-49之间,所以SYS选择的是本世纪,上世纪;

而当前用户若给了一个50年,那么50是在user的50-99之间,选择的是上世纪,本世纪。
那么两者交叉后的一个选项结果是上世纪50年代。


LAST_DAY

--LAST_DAY(date) 返回给定日期所在月的月底日期

例如:查看当前月底日期?

select last_day(sysdate) from dual;


ADD_MONTHS(date , i)

对给定日期加上指定的月,若i为负数则是减去。

例如:查看每个员工入职20周年纪念日?

select ename,add_months(hiredate,12*20) from emp;


MONTHS_BETWEEN(date1 , date2)

计算date1和date2之间相差的月,根据date1 - date2得到的;

例如:查看每个员工至今入职多少个月了?

select ename, months_between(sysdate,hiredate) from emp;


NEXT_DAY

--NEXT_DAY(date, char) :返回date日期数据的下一个周几,周几是由参数char来决定的。

返回给定日期的第二天开始一周之内的指定周几的日期。 1表示周日,2表示周一,以此类推。

--在中文环境下,直接使用“星期三”这种形式,英文环境下,需要使用“wednesday”这种英文的周几。为了避免麻烦,可以直接用数字1-7表示周日到周六。 
--NEXT_DAY不是明天!!


LEAST, GREATEST

求最小值与最大值,除了日期外,常用的数字也可以比较大小。

select least(sysdate,to_date('2018-03-04','YYYY-MM-DD')) from dual;


EXTRACT(date from datetime) 提取给定日期中指定时间分量的值

从emp表中查询1980年入职的员工??

select ename,hiredate from emp where extract(year from sysdate)=1980;



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值