17,134
社区成员
发帖
与我相关
我的任务
分享
declare
v1 number(10,2):=900.10;
v2 number(10,2):=800.20;
str varchar2(10);
str1 varchar2(10);
str2 varchar2(10);
begin
str1:=to_char(v1,'fm9999999.90');
str2:=to_char(v2,'fm9999999.90');
select trunc((trunc(v1)*60+substr(str1,instr(str1,'.')+1)-(trunc(v2)*60+substr(str2,instr(str2,'.')+1)))/60)||'.'
||mod(trunc(v1)*60+substr(str1,instr(str1,'.')+1)-(trunc(v2)*60+substr(str2,instr(str2,'.')+1)),60) into str from dual;
dbms_output.put_line(str);
end;
SQL> declare
2 v1 number(10,2):=900.10;
3 v2 number(10,2):=800.20;
4 str varchar2(10);
5 str1 varchar2(10);
6 str2 varchar2(10);
7 begin
8 str1:=to_char(v1,'fm9999999.90');
9 str2:=to_char(v2,'fm9999999.90');
10 select trunc((trunc(v1)*60+substr(str1,instr(str1,'.')+1)-(trunc(v2)*60+substr(str2,instr(str2,'.')+1)))/60)||'.'
11 ||mod(trunc(v1)*60+substr(str1,instr(str1,'.')+1)-(trunc(v2)*60+substr(str2,instr(str2,'.')+1)),60) into str from dual;
12 dbms_output.put_line(str);
13 end;
14 /
99.50
PL/SQL procedure successfully completed
1 declare
2 v1 number:=900.10;
3 v2 number:=800.20;
4 diff number;
5 begin
6 diff:=floor(v1)*60+(v1-floor(v1))*100-floor(v2)*60-(v2-floor(v2))*100;
7 diff:=floor(diff/60)+mod(diff,60)/100;
8 dbms_output.put_line(to_char(diff,'999999.00'));
9* end;
SQL> /
99.50
PL/SQL procedure successfully completed.
declare
v1 number:=900.10;
v2 number:=800.20;
ds interval day to second;
diff number(8,2);
begin
ds:=numtodsinterval(floor(v1),'hour')+numtodsinterval((v1-floor(v1))*100,'minute')-
numtodsinterval(floor(v2),'hour')-numtodsinterval((v2-floor(v2))*100,'minute');
diff:=extract(day from ds)*24+extract(hour from ds)+extract(minute from ds)/100;
dbms_output.put_line(to_char(diff,'99999.00'));
end;
/
SELECT CASE
WHEN sign(MOD(900.10, 1) - MOD(800.20, 1)) >= 0 THEN
900.10 - 800.20
ELSE
900.10 - 800.20 - 0.4
END
FROM dual;SQL> SELECT CASE
2 WHEN sign(MOD(900.10, 1) - MOD(800.20, 1)) >= 0 THEN
3 trunc(900.10) - trunc(800.20) + MOD(900.10, 1) - MOD(800.20, 1)
4 ELSE
5 trunc(900.10) - trunc(800.20) - 1 + 0.6 + MOD(900.10, 1) -
6 MOD(800.20, 1)
7 END
8 FROM dual;
CASEWHENSIGN(MOD(900.10,1)-MOD
------------------------------
99.5
SQL>