oracle有一批数据一个时间是登记时间一个时间是发布时间,我现在想知道这登记时间和发布时间相差两个小时以上的所有数据该怎么写语句呀。郁闷死了。
上面是两个时间  in_time是登记时间,insert_time发布时间 相减后所有大于两个小时以上发布的数据显示出来。

解决方案 »

  1.   

    自定义一个函数可以搞定:create or replace function datediff(p_what in varchar2, p_d1 in date, p_d2 in date) return number is 
    l_result number; 
    begin 
    select decode( upper(p_what), 'SS', (p_d2-p_d1)* 24 * 60 * 60 
    , 'MI', (p_d2-p_d1)* 24 * 60 
    , 'HH', (p_d2-p_d1)* 24 
    , 'DD', trunc(to_number(to_char(to_date(p_d2,'DD-MON-YYYY'), 'j')) - to_number(to_char(to_date(p_d1,'DD-MON-YYYY'), 'j'))) , 'MM', trunc(months_between(to_date(to_char(p_d2,'DD-MON-YYYY'), 'DD-MON-YYYY'), to_date(to_char(p_d1,'DD-MON-YYYY'), 'DD-MON-YYYY'))) , 'YY', trunc(months_between(to_date(to_char(p_d2,'DD-MON-YYYY'), 'DD-MON-YYYY'), to_date(to_char(p_d1,'DD-MON-YYYY'), 'DD-MON-YYYY')) / 12) , NULL ) 
    into l_result from dual; 
    return(l_result); 
    end datediff; 
    使用方法: select datediff( 'DD', '01-May-1976 00:00:00', '01-May-2004 00:00:00' ) from dual
      

  2.   


    select * from tab where insert_time-in_time>2/24
      

  3.   

    select * from tab where insert_time-in_time>2/24
       2/24是代表大于两个小时的吗?
      

  4.   

    select * from table_name where (insert_time-in_time)/24>2
    两个时间想减的差值是天数,除以24后是小时数
      

  5.   

    上面语句是OK的...
    什么第八行?
    如果in_time、insert_time数据类型不是Date,而存在字符就可以用function 处理...在function里判断不是Date就为空,其它可相减...
      

  6.   

    如果in_time和insert_time是日期类型
    直接这样select * from tablename where (insert_time-in_time)*24>2
    如果不是,则先转化为日期