oracle中两个时间戳(以天为单位)的差异,包括时间戳之间的差异

时间:2017-03-21 12:23:05

标签: oracle oracle11g

我有一个表,它在Oracle DB中有两个带TimeStamp的字段。我必须在几天内计算这两列之间的差异,包括时间戳值。

Ex :- I have both column values as following than 
Column1 value = 07-DEC-16 11.05.24.500000000 PM 
Column2 value = 08-DEC-16 03.12.06.874000000 AM

天计算应该显示为1.目前在搜索和读取堆栈流量上的许多问题之后我才知道,现在我使用以下查询来计算这两列之间的差异

Select Extract( Day From Diff ) Days
From (Select B1.Column2 - B1.Column1 As Diff
From Table1 B1);
  

此查询导致计算天数为0而不是1。

我不知道该怎么做,请指导。 我需要将其转换为不同的格式吗?或其他什么?

1 个答案:

答案 0 :(得分:4)

如果您只想要从2016-12-072016-12-08(忽略时间组件)之间的区别,那么:

SELECT TRUNC( column2 ) - TRUNC( column1 ) AS days
FROM   table1

如果您想要将差异四舍五入到最近的那天(忽略小数秒),您可以这样做:

SELECT CEIL( CAST( column2 AS DATE ) - CAST( column1 AS date ) ) AS days
FROM   table1

如果您想要包含小数秒并向上舍入到最近的一天,那么:

SELECT CEIL(
         TRUNC( column2, 'MI' )
         - TRUNC( column1, 'MI' )
         + EXTRACT( SECOND FROM column2 ) / (24*60*60)
         - EXTRACT( SECOND FROM column1 ) / (24*60*60)
       ) AS days
FROM   table1