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

标签 oracle timestamp

我有两个 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/

相关文章:

postgresql - 更改数据的时区值

java - java中将秒转换为时间戳

oracle - 如何轻松分析 Oracle 包执行的性能问题?

javascript - 使用 oracle 查询创建图表

oracle - PLS-00103 : Encountered the symbol "(" when expecting

timestamp - AppleScript:QuickTime 影片录制完成后自动保存

java - java中时间戳字符串转时间戳

c++ - 未知的时间戳格式

oracle - 如何以普通用户身份在 Oracle 中运行 dbms_crypto 函数?

sql - 在 Oracle 中,如何将 Rank() (或任何其他工作方式)降低到组级别而不是行级别?