100分在线等,timestamp相减用于trunc函数提示“数据类型不一致: 应为 NUMBER, 但却获得 INTERVAL DAY TO SECOND”
例: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
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
SQL code
select trunc(to_number(substr((t2-t1),1,instr(t2-t1,' '))))*24*60*60
from ezMoniOnline where id=1
------解决方案--------------------
------解决方案--------------------
trunc 函数用的不对,timestamp类型相减后得到的不是数字类型的值!
------解决方案--------------------
select to_timestamp('20100908','yyyymmdd') - to_timestamp('20100907','yyyymmdd') from dual;
得到的不是数字,是包含 天、时、分、秒的一个结果,从中截取可以得到天、时、分、秒。
------解决方案--------------------
貌似不能得到的。数据类型不一致。
------解决方案--------------------
------解决方案--------------------
------解决方案--------------------
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 下午 1
SQL> select months_between(T1,T2)*31*24*3600 from ezmonionline;
MONTHS_BETWEEN(T2,T1)*31*24*36
------------------------------
86400
SQL>