八、Oracle学习笔记:日期函数

一、日期操作

1.数据库日期类型
        date:数据库常用的日期类型,可以存储年月日时分秒默认格式
             dd-mon-rr,占用7个字节
             第一个字节:存的是 值+100     
             第二个字节:存的是 年                       yyyy\yy
             第三个字节:存的是 月                       MM
             第四个字节:存的是 天                       dd
             第五个字节:存的是 时                       hh,hh12\hh24
             第六个字节:存的是 分                       mm
             第七个字节:存的是 秒                       ss
         timestamp:时间戳类型
             与date类型相似,可以精确到纳秒级别
             最多占用11个字节,从前七个字节与date一致
             从第八个到第十一个字节都是存储的
2.关键字
        sysdate:返回的是当前系统时间,年月日时分秒
        systimestamp:返回的是当前系统时间,可以精确到毫秒
        eg:
        drop table temp_12;
         create table temp_12(
                t1 date,
                t2 timestamp
         ); 
        insert into temp_12 values(sysdate,systimestamp);
        select * from temp_12;

3.日期操作函数

(1)函数:日期类型转换成字符串类型

--格式:to_char(p1,p2),将日期p1,按照p2的格式转换成字符串类型
--练习:查询temp_12表,使日期按照'yyyy-MM-dd HH-mm-ss'的格式显示
  select to_char(t1,'yyyy-MM-dd HH-mm-ss'),to_char(t2,'yyyy-MM-dd HH-mm-ss') from temp_12;
           

(2)函数:字符串类型转换成日期类型 

--格式:to_date(p1,p2),将字符串p1,按照p2的格式转换成日期类型
--练习:插入一条数据,t1为自己的出生日期,t2为2016年8月31日上午9点30分25秒
  insert into temp_12 values(to_date('1996-12-18 ','yyyy-MM-dd'),
  to_date('2016-8-31 09:30:25','yyyy-MM-dd hh:mi:ss'));
--练习:查询所有员工的入职日期,格式如下:xx日xx月xx年
  select to_char(hiredate,'dd"日"MM"月"yyyy"年"') from emp;

(3)函数:查看当前月份的最后一天日期

--格式:last_day(p1):查看p1中的月份的最后一天的日期
--练习:查询当前系统时间的月份的最后一天
  select last_day(sysdate) from dual;  

(4)函数:在当前日期加上n个月,返回n个月后的日期

--格式:add_months(p,n),在日期p的基础上加上n个月,返回的n个月的日期
--      n可以为小数,会截取到整数进行增加,可以为负数
--练习:推算2017年1月31日的一个月后的日期
  select add_months(to_date('2017-01-31','yyyy-MM-dd'),1) as 推算的日期 from dual; 
--练习:推算当前系统时间的前两个月的日期
  select add_months(sysdate,-2) as 推算的日期 from dual;        

(5)函数:计算两个日期间相差的天数  

--格式:months_between(p1,p2),计算两个日期p1和p2之间相差的月份,会存在小数的情况
--练习:计算出生日期和当前系统时间的差
  select months_between(sysdate,to_date('1996-12-18','yyyy-MM-dd')) from dual;                

(6)函数:计算下个周几的日期

--格式:next_day(date,num),表示查看参数date的下一个周几的日期
--     date:某一日期,num:范围为1-7,表示周日到周六
--练习:查看当前系统时间的下一个周日的日期
  select to_char(next_day(sysdate,1),'yyyy-mm-dd') "日期" from dual;
--练习:查看生产日期'2016-10-10'的一个月后的下一个周六的促销日期
  select next_day(add_months(to_date('2016-10-10','yyyy-mm-dd'),1),7) "促销日" from dual;

(7)函数:比较多个日期的最小日期,最大日期

--格式:least(p1,p2,p3,...........)
--     多个参数比较,求出最小的,要求参数为同一类型,或者可以默认转换成第一个参数的类型
--格式:greatest(p1,p2,p3,...........)
--     多个参数比较,求出最大的,要求参数为同一类型,或者可以默认转换成第一个参数的类型
--练习:计算当前系统时间,澳门回归日期,香港回归日期的最小日期,和最大的日期
  select least(sysdate,to_date('1999-12-20','yyyy-mm-dd'),to_date('1997-07-01','yyyy-mm-dd')) from dual;
--练习:统计3,2,1,4,5,中最小值和最大值
  select least(1,2,3,4,5) "min",greatest(1,2,3,4,5) "max" from dual; 
--练习::统计'33',1,2,5,4,'a',中最小值和最大值
  select least('33',2,1,4,5,'a') "min",greatest('33',2,1,4,5,'a') "max" from dual;    
--字符串比较大小,是从比较字符的ASCII码,从左开始比较 
--练习:比较多个日期的最大值
  select greatest(sysdate,to_date('1999-12-20','yyyy-mm-dd'),to_date('1997-07-01','yyyy-mm-dd')) from dual;

(8)函数:从当前日期中提取分量值

--格式:extract(p1 from p2),表示从日期p2中提取分量p1
--     日期分量
--     year,month,day,hour,minute,second
--     日期类型关键字sysdate,systimestamp
--练习:分别从日期类型的关键字中提取分量
  select extract(year from sysdate) year,extract(month from sysdate) month,extract(day from sysdate) day from dual;
  select extract(year from systimestamp),extract(month from systimestamp),extract(day from systimestamp),
  extract(hour from systimestamp),extract(minute from systimestamp),extract(second from systimestamp) from dual;
--可以从sysdate中提取年月日,可以从systimestamp中提取年月日时分秒
       

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值