作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个 timestamp
栏目:arrTime
和 depTime
.
我需要找出公共(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.
date + interval - date
加号运算符在这里优先于减号。原因可能是间隔减去日期是无效操作,但文档也暗示是这种情况(没有出来说)。因此,执行的第一个操作是日期 + 间隔。一个日期加上一个间隔就是一个日期。刚离开
date - date
根据文档,这会产生一个表示天数的整数。但是,您将原始时间间隔乘以 1,440,因此这现在代表了原本天数的 1,440 倍。然后你就剩下秒数了。
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/
我是一名优秀的程序员,十分优秀!