如何在Oracle中找到与日期相关的时差?

时间:2015-03-15 19:53:41

标签: oracle oracle11g

我想找到Date类型列中的值与该特定日期的固定时间之间的时差。

考虑一下,

  列中的

值 - 4/16/2011 4:00:19 PM

     

固定时间为 - 下午3:00:00

我希望答案为1hr 0min 19sec ago。无论我喜欢什么类型的它。

谢谢

1 个答案:

答案 0 :(得分:2)

由于您不关心返回的数据类型,我可能会转发timestamp,以便您可以返回interval day to second

SQL> select cast( sysdate as timestamp ) from dual
  2  ;

CAST(SYSDATEASTIMESTAMP)
---------------------------------------------------------------------------
15-MAR-15 04.05.46.000000 PM

SQL> ed
Wrote file afiedt.buf

  1  select cast( sysdate as timestamp ) -
  2            cast( trunc(sysdate) + interval '15' hour as timestamp )
  3*   from dual
  4  /

CAST(SYSDATEASTIMESTAMP)-CAST(TRUNC(SYSDATE)+INTERVAL'15'HOURASTIMESTAMP)
---------------------------------------------------------------------------
+000000000 01:06:18.000000

如果要返回字符串而不是间隔,可以使用extract从间隔中提取数据

SQL> ed
Wrote file afiedt.buf

  1  select extract( hour from delta ) || ' hours, ' ||
  2         extract( minute from delta ) || ' minutes, ' ||
  3         extract( second from delta ) || ' seconds ago'
  4    from (
  5  select cast( sysdate as timestamp ) -
  6            cast( trunc(sysdate) + interval '15' hour as timestamp ) delta
  7    from dual
  8* )
SQL> /

EXTRACT(HOURFROMDELTA)||'HOURS,'||EXTRACT(MINUTEFROMDELTA)||'MINUTES,'||EXTRACT(
--------------------------------------------------------------------------------
1 hours, 10 minutes, 46 seconds ago