这两个以秒为单位计算差异的SQL查询之间有什么区别?

这两个以秒为单位计算差异的SQL查询之间有什么区别?,sql,oracle11g,timestamp,date-difference,Sql,Oracle11g,Timestamp,Date Difference,查询1:选择(强制转换(DATEATTRIBUTE2作为日期)-强制转换(DATEATTRIBUTE1作为日期))*86400作为_表的结果 查询2: SELECT EXTRACT( day from ( dateattribute2 - dateattribute1) )*86400 + EXTRACT( hour from ( dateattribute2 - dateattribute1) )*3600 + EXTRACT( minute from ( dateattribut

查询1:
选择(强制转换(DATEATTRIBUTE2作为日期)-强制转换(DATEATTRIBUTE1作为日期))*86400作为_表的结果

查询2:

SELECT
  EXTRACT( day from ( dateattribute2 - dateattribute1) )*86400 +
  EXTRACT( hour from ( dateattribute2 - dateattribute1) )*3600 +
  EXTRACT( minute from ( dateattribute2 - dateattribute1) )*60 +
  EXTRACT( second from ( dateattribute2 - dateattribute1) ) AS result
  FROM A_TABLE;

dateattribute1和dateattribute2都是时间戳类型。


两个SQL查询似乎都在以秒为单位计算差异。这两者之间有什么区别吗?

@GurV谢谢你的建议,但我已经尝试过了,发现在某些情况下它们是相等的,而在某些情况下它们是不相等的。而第一个查询只是计算“日差”并将其乘以“一天的秒数”(因为是日期,所以忽略了当天的实际时间!!!)第二个查询计算天到秒+小时到秒+分钟到秒…@FelixD在Oracle中,日期数据类型将时间与日期一起存储。但是,与时间戳不同,日期不存储秒的小数。@FelixD。否,由于Oracle中的舍入问题,第一个查询在第一个查询中给出秒的小数的内部计算。这很烦人,但有时确实会发生。@noobCoder-差异是否总是非常小?(应该是)。第一次计算中的一个问题是舍入误差,因为差异(天数)需要除以86400。对于以2为基数工作的计算机,(1/3)是不可能的*3完全等于1(除非您在软件中以某种方式这样做),因为1/3在基数2中没有有限表示(就像在基数10中没有一样)需要时刻注意的一点——不仅仅是Oracle和SQL,还有它的总体情况。@GurV感谢您的建议,但我已经尝试过这样做,发现在某些情况下它们是相等的,而在某些情况下它们是不相等的。而第一个查询只是计算“日差”并将其乘以“一天的秒数”(因为是日期,所以忽略了当天的实际时间!!!)第二个查询计算天到秒+小时到秒+分钟到秒…@FelixD在Oracle中,日期数据类型将时间与日期一起存储。但是,与时间戳不同,日期不存储秒的小数。@FelixD。否,由于Oracle中的舍入问题,第一个查询在第一个查询中给出秒的小数的内部计算。这很烦人,但有时确实会发生。@noobCoder-差异是否总是非常小?(应该是)。第一次计算中的一个问题是舍入误差,因为差异(天数)需要除以86400。对于以2为基数工作的计算机,(1/3)是不可能的*3完全等于1(除非您在软件中以某种方式这样做),因为1/3在基数2中没有有限的表示形式(就像它在基数10中没有一样)。这是一件需要时刻注意的事情-不仅在Oracle和SQL中,而且在一般情况下。