【发布时间】:2012-04-22 22:29:31
【问题描述】:
当减去timestamps 时,返回值为interval 数据类型。有没有一种优雅的方法可以将此值转换为间隔中的(毫秒/微)秒总数,即整数。
以下方法可行,但不是很漂亮:
select abs( extract( second from interval_difference )
+ extract( minute from interval_difference ) * 60
+ extract( hour from interval_difference ) * 60 * 60
+ extract( day from interval_difference ) * 60 * 60 * 24
)
from ( select systimestamp - (systimestamp - 1) as interval_difference
from dual )
在 SQL 或 PL/SQL 中有更优雅的方法吗?
【问题讨论】:
-
:我在某个地方找到了这个` select (TRUNC(SYSDATE) + out.interv - TRUNC(SYSDATE)) * 86400 from (select systimestamp -(systimestamp -1) as interv from dual )out`
-
由于将返回的以秒为单位的间隔添加到一个固定精度的数字变量中,所以在cmets中提到的查询中会丢失秒的小数部分
-
虽然它可能看起来不太优雅,但我仍然更喜欢这种基本解决方案,因为它不会那么容易受到“ORA-01873:间隔的前导精度太小”的影响。