oracle取时间间隔分钟,Oracle获取时间间隔以及转换为时分秒格式

1、获取2个输入时间的时间间隔两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒,毫秒):

天:

ROUND(TO_NUMBER(END_DATE - START_DATE))

小时:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24)

分钟:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60)

秒:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60)

毫秒:

ROUND(TO_NUMBER(END_DATE - START_DATE) * 24 * 60 * 60 * 1000)

示例:select

round(to_number(TO_DATE('2012-02-20 17:45:04','yyyy-mm-dd hh24:mi:ss')-TO_DATE('2012-02-19 08:34:04','yyyy-mm-dd hh24:mi:ss')),2) as Day

from dual;--天

select

round(to_number(TO_DATE('2012-02-20 17:45:04','yyyy-mm-dd hh24:mi:ss')-TO_DATE('2012-02-19 08:34:04','yyyy-mm-dd hh24:mi:ss'))*24,2) as Hour

from dual;--小时

2、利用Extract函数将时间间隔转换成{天时分秒}格式

//oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分

//语法如下:

EXTRACT (

{ YEAR | MONTH | DAY | HOUR | MINUTE | SECOND }

| { TIMEZONE_HOUR | TIMEZONE_MINUTE }

| { TIMEZONE_REGION | TIMEZONE_ABBR }

FROM { date_value | interval_value } )

//我们只可以从一个date类型中截取 year,month,day(date日期的格式为yyyy-mm-dd);

获取日期中的截取值:select extract(day from date'2011-05-17') day from dual;时间间隔通过to_timestamp()相减后的值包含时分秒,例如 dt2-dt1=+000000102 04:01:46.000000000,因此,to_timestamp()转换的时间可以截取使用

select extract(day from dt2-dt1) day

,extract(hour from dt2-dt1) hour

,extract(minute from dt2-dt1) minute

,extract(second from dt2-dt1) second

from (

select to_timestamp('2011-02-04 15:07:00','yyyy-mm-dd hh24:mi:ss') dt1

,to_timestamp('2011-05-17 19:08:46','yyyy-mm-dd hh24:mi:ss') dt2

from dual)

时间间隔通过to_date()相减后的值不包含时分秒,是包含小数的天值,例如 dt2-dt1=102.167893518519天,to_date()转换的时间需要将Day转换为Second才能被extract识别,如下:SELECT

(EXTRACT(DAY FROM (to_date('2012-03-30 00:00:00','YYYY-MM-DD HH24:MI:ss')-to_timestamp('2012-03-29 00:00:00','YYYY-MM-DD HH24:MI:ss')) DAY TO SECOND )

|| '天'

||EXTRACT(HOUR FROM (to_date('2012-03-30 00:00:00','YYYY-MM-DD HH24:MI:ss')-to_date('2012-03-29 00:00:00','YYYY-MM-DD HH24:MI:ss')) DAY TO SECOND )

|| '时'

|| EXTRACT(MINUTE FROM (to_date('2012-03-30 23:23:15','YYYY-MM-DD HH24:MI:ss')-to_date('2012-03-29 00:23:00','YYYY-MM-DD HH24:MI:ss')) DAY TO SECOND )

|| '分'

|| EXTRACT(SECOND FROM (to_date('2012-03-30 23:23:15','YYYY-MM-DD HH24:MI:ss')-to_date('2012-03-29 00:23:00','YYYY-MM-DD HH24:MI:ss')) DAY TO SECOND )

|| '秒') as timespan_

FROM DUAL;

3、利用numtodsinterval()方法,该方法只转换成时分秒,如果溢出,则重新开始。

示例:将123.13小时转换成时分秒格式,结果:03:07:48

select SUBSTR(numtodsinterval(123.13,'hour'),12,8) from dual;

4、如果确定时间间隔在一天之内,可以使用如下方式,将不到一天的时间间隔*86400转换成秒,再将秒数利用to_date('','SSSSS')换算成当天的时间,换算完成后的具体时间即是要求的时间间隔的时分秒格式数据。select to_date(0,'SSSSS') from dual;--2018/6/1,当天0时0分0秒

select to_date(1,'SSSSS') from dual;--2018/6/1 0:00:01,当天0时0分1秒

select to_date(86399,'SSSSS') from dual;--2018/6/1 23:59:59,当天23时59分59秒select

to_char(to_date(trunc((to_date('2012-11-1 23:59:59','yyyy-mm-dd hh24:mi:ss')-to_date('2012-11-1 00:00:00','yyyy-mm-dd hh24:mi:ss')) *86400),'SSSSS'),'fmhh24"小时"mi"分钟"ss"秒"' )

from dual

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值