ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Oracle trunc()、interval、extract()处理日期类型

2022-03-08 15:35:03  阅读:316  来源: 互联网

标签:sysdate -- interval 日期 DUAL Oracle extract trunc


1.情景展示

在数据库中,我们经常需要对日期类型的字段进行操作,下面讲一下进行日期计算的三种方式。

2.具体分析

trunc(date[,fmt])

trunc()既可以对日期类型进行截取,也能对数值类型进行截取;

本文只介绍如何对日期进行截取,数值类型的截取方式见文末推荐。

Description of trunc_date.eps follows

参数说明:

       date 待做截取处理的日期

       fmt 指定要截取的日期格式。可选项,不带该参数时,截去时分秒,格式只能分为:一种 y,yy,yyy,yyyy,mm,dd,d;另一种w,iw,ww。

比较常用的是:不带第二个参数,也就是截取到日。

    更多用法举例:

--参数是日期,不带第2个参数
SELECT TRUNC(SYSDATE) FROM DUAL;--2017/6/7
--返回当前日期
SELECT TRUNC(SYSDATE, 'DD') FROM DUAL;--2017/6/7
--返回当年第一天
SELECT TRUNC(SYSDATE, 'YYYY') FROM DUAL;--2017/1/1
SELECT TRUNC(SYSDATE, 'YYY') FROM DUAL;--2017/1/1
SELECT TRUNC(SYSDATE, 'YY') FROM DUAL;--2017/1/1
SELECT TRUNC(SYSDATE, 'Y') FROM DUAL;--2017/1/1
--返回当月第一天
SELECT TRUNC(SYSDATE, 'MM') FROM DUAL;--2017/6/1
--返回当前星期的第一天
SELECT TRUNC(SYSDATE, 'D') FROM DUAL;--2017/6/4
--这种方式会报错
SELECT TRUNC(SYSDATE, 'YYYY-MM-DD') FROM DUAL;

   UpdateTime--2017年7月21日11:23:20

   格式w,iw,ww区别介绍:

   参考链接:http://blog.chinaunix.net/uid-23072872-id-3664151.html

   这3个参数均为取每周第一天,区别如下:             

      w,按每月的1日为每周第一天,例如1日为当月第一周第一天,8日为第二周第一天……依此类推;
      ww,与w功能类似,不过它是按每年的1月1日为第一周第一天,1月8日为第二周第一天……依此类推;
      iw,不受月份与年份的影响,直接取日期参数的周一。

      举例:

--trunc(sysdate),截取当前日期年月日
--trunc(sysdate,'iw')取当前日期所在星期的星期一
--trunc(sysdate,'ww') 按年度计算取当前日期所在星期的星期一
--trunc(sysdate,'w') 按月度计算取当前日期所在星期的星期一
SELECT trunc(sysdate) 当前日期,trunc(sysdate,'iw') 取星期一,trunc(sysdate,'ww') 按年度计算取星期一,trunc(sysdate,'w') 按月度计算取星期一 FROM DUAL

extract()

extract()函数定义如下:

extract (    

        { year | month | day | hour | minute | second }    

        | { timezone_hour | timezone_minute }    

        | { timezone_region | timezone_abbr }    

from { date_value | interval_value } )

Description of extract_datetime.gif follows

从日期类型当中提取年、月、日

select extract( year from sysdate) FROM DUAL
union
select extract( month from sysdate) FROM DUAL
union
select extract( day from sysdate) FROM DUAL

从日期字符串当中提取年、月、日

需要加date关键字,将日期字符串转成日期类型

select extract( year from date '2022-03-08') FROM DUAL
union
select extract( month from date '2022-03-08') FROM DUAL
union
select extract( day from date '2022-03-08') FROM DUAL

从timestamp中获取年月日时分秒

select 
 extract(year from systimestamp) year
,extract(month from systimestamp) month
,extract(day from systimestamp) day
,extract(minute from systimestamp) minute
,extract(second from systimestamp) second
,extract(timezone_hour from systimestamp) th
,extract(timezone_minute from systimestamp) tm
,extract(timezone_region from systimestamp) tr
,extract(timezone_abbr from systimestamp) ta
from dual

interval

interval '{ integer | integer time_expr | time_expr }' 

{ { day | hour | minute } [ ( leading_precision ) ] 

| second [ ( leading_precision [, fractional_seconds_precision ] ) ] } 

[ to { day | hour | minute | second [ (fractional_seconds_precision) ] } ]

 

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

标签:sysdate,--,interval,日期,DUAL,Oracle,extract,trunc
来源: https://www.cnblogs.com/Marydon20170307/p/15979791.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有