gpt4 book ai didi

oracle - 在两个Oracle时间戳之间获取秒数

转载 作者:行者123 更新时间:2023-12-03 13:28:10 25 4
gpt4 key购买 nike

Tom Kyte suggests使用EXTRACT来获得区别:

extract( day from (x-y) )*24*60*60+
extract( hour from (x-y) )*60*60+
...


这似乎比这更难读,也更慢,例如:

( CAST( x AS DATE ) - CAST( y AS DATE ) ) * 86400




那么,如何获得以秒为单位的两个时间戳之间的差异?谢谢!

最佳答案

“最佳实践”

无论您做什么,都将其包装在一个函数中,例如seconds_between (from_date, to_date)-不管它如何执行(选择最有效的方法)-这样,您的代码在做什么就将非常明显。

性能

我使用以下测试用例在笔记本电脑(WinXP)上的11gR1上测试了这两种方法。看来CAST选项是最快的。 (t1是基线,t2使用extract方法,t3使用cast方法)

t1 (nothing) 3
t2 (extract) 338
t3 (cast) 101

t1 (nothing) 3
t2 (extract) 336
t3 (cast) 100


测试脚本

declare
x TIMESTAMP := SYSTIMESTAMP;
y TIMESTAMP := TRUNC(SYSDATE);
n PLS_INTEGER;
lc CONSTANT PLS_INTEGER := 1000000;
t1 PLS_INTEGER;
t2 PLS_INTEGER;
t3 PLS_INTEGER;
begin
t1 := DBMS_UTILITY.get_time;
for i in 1..lc loop
n := i;
end loop;
t1 := DBMS_UTILITY.get_time - t1;
t2 := DBMS_UTILITY.get_time;
for i in 1..lc loop
n := extract(day from (x-y))*24*60*60
+ extract(hour from (x-y))*60*60
+ extract(minute from (x-y))*60
+ extract(second from (x-y));
end loop;
t2 := DBMS_UTILITY.get_time - t2;
t3 := DBMS_UTILITY.get_time;
for i in 1..lc loop
n := ( CAST( x AS DATE ) - CAST( y AS DATE ) ) * 86400;
end loop;
t3 := DBMS_UTILITY.get_time - t3;
dbms_output.put_line('t1 (nothing) ' || t1);
dbms_output.put_line('t2 (extract) ' || t2);
dbms_output.put_line('t3 (cast) ' || t3);
end;

关于oracle - 在两个Oracle时间戳之间获取秒数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3957909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com