例:select trunc(T2-T1) from ezMoniOnline where id=1提示:数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND
没用过oracle,半天没调通,谢谢大虾!!!!!!!!!!!!!!!

解决方案 »

  1.   

    你ezMoniOnline表中T2和T1分别是什么类型?
      

  2.   


    --试试这样可以不?
    select trunc(to_char(T2-T1,'yyyy-mm-dd hh24:mi:ss')) from ezMoniOnline where id=1;
      

  3.   

    我直接用mod(T1 + 24*3600, 86400)为什么说是无效数字呢?
      

  4.   

    --timestamp类型相差的天数,还真不简单啊
    select trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))  from ezMoniOnline where id=1
      

  5.   

    select trunc(to_char(T2-T1,'yyyy-mm-dd hh24:mi:ss')) from ezMoniOnline where id=1
                 *
    第 1 行出现错误:
    ORA-01722: 无效数字
      

  6.   

    网上许多教程将timestamp相减后的结果直接用于加减乘除计算,但我一用就提示 数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND
      

  7.   

    你想得到什么样的东西?
    貌似好像不能转成date吧,两个timestamp类型想减是number型,怎么转成date啊,你用trunc就不行
      

  8.   

    是这样,我想得到两个TIMESTAMP相差的秒数,然后直接用于加减乘除等运算,谢谢!
      

  9.   


    两个timestamp类型想减是number型吗?不是INTERVAL DAY TO SECOND?
      

  10.   


    select trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))*24*60*60
    from ezMoniOnline where id=1
      

  11.   

    谢谢!我重启一下服务器试一下。请问这个例子
    http://www.itmop.com/network/sql/oracle/08046587.html中的trunc(86400*(date2-date1))是否可行?
      

  12.   


    SQL> select trunc(86400*(t2-t1)) from test1;
    select trunc(86400*(t2-t1)) from test1
                      *
    第 1 行出现错误:
    ORA-00932: 数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND
    SQL> ed
    已写入 file afiedt.buf  1* select 86400*(t2-t1) from test1
    SQL> /86400*(T2-T1)
    ---------------------------------------------------------------------------
    -002678400 00:00:00.000000000
      

  13.   

    谢谢各位!我尝试一下,消化一下,以前都是用sql server的。
      

  14.   

    trunc 函数用的不对,timestamp类型相减后得到的不是数字类型的值!
      

  15.   

     select to_timestamp('20100908','yyyymmdd') - to_timestamp('20100907','yyyymmdd')  from dual; 得到的不是数字,是包含 天、时、分、秒的一个结果,从中截取可以得到天、时、分、秒。
      

  16.   

    如何将timestamp转成秒?求最简单的方法解决就结贴了~
      

  17.   

    select (T2-T1)*24*60*60 from ezMoniOnline where id=1 SQL> edi
    已写入 file afiedt.buf  1  select (to_timestamp('2010-10-12 23:23:34','yyyy-mm-dd hh24:mi:ss')
      2  -to_timestamp('2010-10-11 23:23:34','yyyy-mm-dd hh24:mi:ss'))*24*60*60
      3* from dual
    SQL> /(TO_TIMESTAMP('2010-10-1223:23:34','YYYY-MM-DDHH24:MI:SS')-TO_TIMESTAMP('20
    ---------------------------------------------------------------------------
    +000086400 00:00:00.000000000
      

  18.   

    select substr((T2-T1)*24*60*60,2,9)+0 "ss" from ezMoniOnline where id=1
      

  19.   

    SELECT  to_number(substr((t2-t1),instr((t2-t1),' ')+7,2))+to_number(substr((t2-t1),instr((t2-t1),' ')+4,2))*60+to_number(substr((t2-t1),instr((t2-t1),' ')+1,2))*3600+trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))*86400  
    from ezMoniOnline 
    where id=1
    ;
    基本上就这样,没有简单的方法
      

  20.   

    方法很多,
    要最少代码的实际可以使用MONTHS_BETWEEN 
    SQL> select * from ezmonionline;       T1                                T2                                                                                                                    ID
     ------------------       ---------------------------------------------------------
            08-11月-10 01.42.45.656000 下午          09-11月-10 01.42.45.000000 下午                                                                                        1SQL> select months_between(T1,T2)*31*24*3600 from ezmonionline;MONTHS_BETWEEN(T2,T1)*31*24*36
    ------------------------------
                             86400SQL> 
      

  21.   


    select extract(day from inter) * 24 * 60 * 60 +
           extract(hour from inter) * 60 * 60 +
           extract(minute from inter) * 60 +
           extract(second from inter) "seconds"
    from (
    select  
    to_timestamp('20100115112233','yyyymmddhh24miss') -
    to_timestamp('20100101123456','yyyymmddhh24miss') inter
    from dual
    );   seconds
    ----------
       1205257
      

  22.   


    select trunc(to_date('2020-10-01','yyyy-mm-dd')-sysdate) from dual;
    这样的日期向减,在oracle 10g中时能通过的并能得到数字类型的值的。
      

  23.   

    已经测试通过了
    select 
    (to_date(to_char(to_timestamp('2020-10-01','yyyy-mm-dd hh:mi:ss'),'yyyy-mm-dd hh:mi:ss'),'yyyy-mm-dd hh:mi:ss')
    -
    to_date(to_char(to_timestamp('2010-10-01 12:22:22','yyyy-mm-dd hh:mi:ss'),'yyyy-mm-dd hh:mi:ss'),'yyyy-mm-dd hh:mi:ss')
    )*24*60*60
    from dual;
    结果
    315617858
      

  24.   

    转换成你的表信息
    select 
    (to_date(to_char(T1,'yyyy-mm-dd hh:mi:ss'),'yyyy-mm-dd hh:mi:ss')
    -
    to_date(to_char(T2,'yyyy-mm-dd hh:mi:ss'),'yyyy-mm-dd hh:mi:ss')
    )*24*60*60
    from ezmonionline;
      

  25.   

    指出一点,hh与hh24的不同select to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') d1,
    to_char(sysdate, 'yyyy-mm-dd hh:mi:ss') d2
    from dual;D1                           D2                          
    ---------------------------- ----------------------------
    2010-11-09 16:07:20          2010-11-09 04:07:20  
      

  26.   

    最简单的
    timestamp+0就转为date了
    date 相减就 是天数了 
    select trunc(
    (to_timestamp('2010-10-12 23:23:34','yyyy-mm-dd hh24:mi:ss')+0)
    -
    (to_timestamp('2010-10-11 23:23:34','yyyy-mm-dd hh24:mi:ss')+0)
    )
    from dual