时间相减语句 oracle有一批数据一个时间是登记时间一个时间是发布时间,我现在想知道这登记时间和发布时间相差两个小时以上的所有数据该怎么写语句呀。郁闷死了。上面是两个时间 in_time是登记时间,insert_time发布时间 相减后所有大于两个小时以上发布的数据显示出来。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 自定义一个函数可以搞定: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 select * from tab where insert_time-in_time>2/24 select * from tab where insert_time-in_time>2/24 2/24是代表大于两个小时的吗? select * from table_name where (insert_time-in_time)/24>2两个时间想减的差值是天数,除以24后是小时数 上面语句是OK的...什么第八行?如果in_time、insert_time数据类型不是Date,而存在字符就可以用function 处理...在function里判断不是Date就为空,其它可相减... 如果in_time和insert_time是日期类型直接这样select * from tablename where (insert_time-in_time)*24>2如果不是,则先转化为日期 redhat 5.0安装oracle 11g问题 表分区 中 maxvalue 怎么使用? 请教各位专家:oracle某表中如何选择第一个数字前的字符插入另一字段? 求一SQL语句 请问下面的为什么不能显示呀 如何改变oracle 9i的HTTP端口??---》在线等。 vb访问oracle 怪异!急!急!急!关于SQL*Plus工作单与Oracle Enterprise Manager Console之间的一个怪异的问题? SQL求助 在线等待:inner join问题,各位DX帮忙!! 关于表空间和表的问题 用户名密码的问题
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
select * from tab where insert_time-in_time>2/24
2/24是代表大于两个小时的吗?
两个时间想减的差值是天数,除以24后是小时数
什么第八行?
如果in_time、insert_time数据类型不是Date,而存在字符就可以用function 处理...在function里判断不是Date就为空,其它可相减...
直接这样select * from tablename where (insert_time-in_time)*24>2
如果不是,则先转化为日期