zoukankan      html  css  js  c++  java
  • Oracle 计算两个日期相差天时分秒

    1、用到oracle相关函数 

         round、trunc、to_number、to_date

        1.1 round(number[,decimals]) 四舍五入

              number:指需要处理的数值,是必须填写的值。

        decimals:指在进行四舍五入运算时 , 小数的应取的位数,该参数可以不填,不填的时候,系统默认小数位数取0。

        1.2 trunc(number[,num_digits])

              number:指需要处理的数值,是必须填写的值。

        num_digits:用于指定取整精度的数字,截取时不进行四舍五入。该参数可以不填,不填的时候num_digits 的默认值为 0。

         1.3 to_number(expr [, fmt [, 'nlsparam' ] ]) 转换数据类型

               expr:如果expr为char、nchar、varchar2,nvarchar2则可以指定格式fmt,如果是binary_float、binary_double则不能指定格式

               nlsparam: 用于数字转换的TO_CHAR函数中的nlsparam参数具有相同的目的。有关更多信息,请参阅TO_CHAR(nuber)。此功能不直接支持CLOB数据。然而,CLOB可以通过隐式数据转换作为参数传入

          1.4 to_date(char [, fmt [, 'nlsparam' ] ]) 将字符转换为日期格式

                char:需要转换的字符

       fmt:是一种指定char格式的日期时间模型格式。如果省略FMT,则char必须是默认日期格式。默认日期格式由NLS_Area初始化参数隐式确定,也可以由NLS_DATE_FORCT参数显式设置。如果fmt是J,对于Julian,char必须是一个整数。

         nlsparam: 指定正在转换为日期的文本字符串的语言。该参数可以具有以下形式

         1.5 mod(n1,n2) 取余(n1/n2的小数部分)

              n1,n2 都为数字类型 

    相差时分秒

    第一种

    --4天2小时10分 =353405秒
    
    select trunc(353405/(24*60*60)) 天,trunc( mod(353405,24*60*60)/(60*60) ) 时, 
    trunc(mod(353405,60*60)/60) 分,trunc(mod(353405,60)) 秒 from dual;
    View Code

    第二种

    两个日期相减得出一个数字类型

    1天2小时5分10秒=1.0869212962963

     select to_date('2020-01-06 14:35:35','yyyy-mm-dd hh24:mi:ss')-
     to_date('2020-01-05 12:30:25','yyyy-mm-dd hh24:mi:ss') from dual;
    
    select trunc(1.0869212962963) 天 ,
                 trunc(mod(1.0869212962963, 1) * 24) 时,
                 trunc(mod(mod(1.0869212962963, 1) * 24, 1) * 60) 分,
                 trunc(mod(mod(mod(1.0869212962963, 1) * 24, 1) * 60,1)*60) 秒
            from dual;

    第三种

    select startTime, endTime, tday, thour, tminute, round((tt_minute-tminute)*60) as tseconds  
    from 
    (
      select startTime, endTime, tday, thour, trunc((tt_hour-thour)*60) as tminute, (tt_hour-thour)*60 as tt_minute 
      from 
      (select startTime, endTime, tday, trunc((tt_day-tday)*24) as thour, (tt_day-tday)*24 as tt_hour from 
        (select to_number(endTime - startTime) as tt_day, 
             trunc(to_number(endTime - startTime)) as tday, startTime, endTime from 
         (select to_date('2012-11-01 00:20:31','yyyy-mm-dd hh24:mi:ss') as startTime,sysdate as endTime from dual) 
        )
      )
    )
    View Code

  • 相关阅读:
    signalr推送消息
    WebApi2跨域问题
    iTextSharp生成pdf的一个简单例子
    遇到的错误记录
    AutoMapper用法
    visual studio 2015中的webapi生成helpPage,页面不显示方法说明问题解决
    visualstudio 2013 mysql entityframework :实体模型无法添加,闪退
    webapi相关知识
    2016年4月14日
    2016年4月13日
  • 原文地址:https://www.cnblogs.com/ZJ199012/p/12048153.html
Copyright © 2011-2022 走看看