我想计算Oracle sql查询中两个日期之间的时差。我写了以下查询:
DECLARE
v_time varchar2(40);
diff_hours varchar2(40);
BEGIN
select substr(((select date_time from observation_measurement where observation_measurement_id=2861971)), 1,17)
into v_time
from dual;
dbms_output.put_line(v_time);
select 24 * (to_date('06-25-2014 09:46:36', 'MM-DD-YYYY hh24:mi:ss')
- to_date(v_time, 'YY-MM-DD hh24:mi:ss')) into diff_hours
from dual;
END;
第一个select语句返回正确的结果。当我试图计算从当前日期到先前计算日期的时间差时,它显示错误。我怎样才能得到正确的结果?
感谢!!!!
答案 0 :(得分:1)
增加diff_hours变量工作的大小。谢谢克里希纳。 : - )
答案 1 :(得分:1)
使diff_hours
成为NUMBER
变量而不是VARCHAR2
变量!
当然你可以让diff_hours
足够长,以保存你的查询产生的所有无关紧要的小数,但无论如何声明VARCHAR2
毫无意义!
答案 2 :(得分:0)
您好我在您的查询中做了一些更正。告诉我,如果有效
DECLARE
v_time varchar2(40);
-- Increase the size
diff_hours varchar2(200);
BEGIN
select substr(((select date_time from observation_measurement where observation_measurement_id=2861971)), 1,17)
into v_time
from dual;
dbms_output.put_line(v_time);
-- using the same format mask for both the dates
select 24 * (to_date('06-25-2014 09:46:36', 'MM-DD-YYYY hh24:mi:ss')
- to_date(v_time, 'MM-DD-YYYY hh24:mi:ss')) into diff_hours
from dual;
END;
答案 3 :(得分:0)
你可以增加diff_hours,它可能在某些情况下有用,但问题是它可能在其他情况下不起作用。
可以肯定的是,您需要将数字转换为字符串(例如,点后面有2位数字):
select trunc(24*...., 2) into diff_hours