当前位置: 代码迷 >> Oracle管理 >> 100分,timestamp相减用于trunc函数提示“数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND”
  详细解决方案

100分,timestamp相减用于trunc函数提示“数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND”

热度:538   发布时间:2016-04-24 05:21:34.0
100分在线等,timestamp相减用于trunc函数提示“数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND”
例:select trunc(T2-T1) from ezMoniOnline where id=1

提示:数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND


没用过oracle,半天没调通,谢谢大虾!!!!!!!!!!!!!!!

------解决方案--------------------
探讨
例:select trunc(T2-T1) from ezMoniOnline where id=1

提示:数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND


没用过oracle,半天没调通,谢谢大虾!!!!!!!!!!!!!!!

------解决方案--------------------
SQL code
--试试这样可以不?select trunc(to_char(T2-T1,'yyyy-mm-dd hh24:mi:ss')) from ezMoniOnline where id=1;
------解决方案--------------------
SQL code
--timestamp类型相差的天数,还真不简单啊select trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))  from ezMoniOnline where id=1
------解决方案--------------------
探讨
网上许多教程将timestamp相减后的结果直接用于加减乘除计算,但我一用就提示

数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND

------解决方案--------------------
探讨
我直接用mod(T1 + 24*3600, 86400)为什么说是无效数字呢?

------解决方案--------------------
SQL code
select trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))*24*60*60from ezMoniOnline where id=1
------解决方案--------------------
探讨
谢谢!我重启一下服务器试一下。

请问这个例子
http://www.itmop.com/network/sql/oracle/08046587.html

中的trunc(86400*(date2-date1))是否可行?

------解决方案--------------------
trunc 函数用的不对,timestamp类型相减后得到的不是数字类型的值!
------解决方案--------------------
select to_timestamp('20100908','yyyymmdd') - to_timestamp('20100907','yyyymmdd') from dual; 

得到的不是数字,是包含 天、时、分、秒的一个结果,从中截取可以得到天、时、分、秒。
------解决方案--------------------
貌似不能得到的。数据类型不一致。
------解决方案--------------------
探讨
例:select trunc(T2-T1) from ezMoniOnline where id=1

提示:数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND


没用过oracle,半天没调通,谢谢大虾!!!!!!!!!!!!!!!

------解决方案--------------------
探讨
引用:
例:select trunc(T2-T1) from ezMoniOnline where id=1

提示:数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND


没用过oracle,半天没调通,谢谢大虾!!!!!!!!!!!!!!!


SQL code




select (T2-T……

------解决方案--------------------
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
;
基本上就这样,没有简单的方法
------解决方案--------------------
方法很多,
要最少代码的实际可以使用MONTHS_BETWEEN 


SQL code
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>
  相关解决方案