gpt4 book ai didi

oracle - 如何在 Oracle 中找到不同的 b/w TIMESTAMP 格式值?

转载 作者:行者123 更新时间:2023-12-01 07:19:32 25 4
gpt4 key购买 nike

我有两个 timestamp栏目:arrTimedepTime .
我需要找出公共(public)汽车晚点的分钟数。
我尝试了以下方法:

SELECT RouteDate, round((arrTime-depTime)*1440,2) time_difference
FROM ...

我收到以下错误: inconsistent datatype . expected number but got interval day to second
我如何解析分钟数?

如果我简单地减去: SELECT RouteDate, arrTime-depTime)*1440 time_difference结果正确但格式不正确:
 time_difference
+00000000 00:01:00 0000000

最佳答案

时间戳算术的结果是一个 INTERVAL 数据类型。您有一个 INTERVAL DAY TO SECOND那里...
如果您想要分钟数,一种方法是使用 EXTRACT() , 例如:

select extract( minute from interval_difference )
+ extract( hour from interval_difference ) * 60
+ extract( day from interval_difference ) * 60 * 24
from ( select systimestamp - (systimestamp - 1) as interval_difference
from dual )
或者,您可以使用日期技巧:
select sysdate + (interval_difference * 1440) - sysdate
from (select systimestamp - (systimestamp - 1) as interval_difference
from dual )
“trick”版本之所以有效,是因为 operator order of precedence以及日期和时间戳算术之间的差异。
最初的操作如下所示:
date + ( interval * number ) - date
如文档中所述:

Oracle evaluates expressions inside parentheses before evaluating those outside.


因此,第一个操作将间隔乘以 1,440。一个区间,即一个离散的时间段,乘以一个数字是另一个离散的时间段, see the documentation on datetime and interval arithmetic .所以,这个操作的结果是一个区间,给我们留下:
date + interval - date
加号运算符在这里优先于减号。原因可能是间隔减去日期是无效操作,但文档也暗示是这种情况(没有出来说)。因此,执行的第一个操作是日期 + 间隔。一个日期加上一个间隔就是一个日期。刚离开
date - date
根据文档,这会产生一个表示天数的整数。但是,您将原始时间间隔乘以 1,440,因此这现在代表了原本天数的 1,440 倍。然后你就剩下秒数了。
它是 worth noting that :

When interval calculations return a datetime value, the result must be an actual datetime value or the database returns an error. For example, the next two statements return errors:


“技巧”方法会失败,但很少会失败,但它仍然会失败。与以往一样,最好正确地做到这一点。

关于oracle - 如何在 Oracle 中找到不同的 b/w TIMESTAMP 格式值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17413096/

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