我在Mysql中查询使用表中的TIMESTAMPDIFF返回分钟。但现在我已将数据迁移到Oracle。所以我想使用相同的查询来获取Oracle中的表中的TIMESTAMPDIFF。 Oracle也不支持mysql中的NOW()函数。查询中的PROCESS_START_DATE列包含包含日期和时间的数据。我尝试在oraclebut的EXTRACT功能没有工作。这是我的疑问:
select * from(
select trunc(abs(to_date('27/01/2015 08:00:00','dd/mm/yyyy hh:mi:ss') - PMS.PROCESS_START_DATE)*24*60),PM.NAME,PM.ENABLED
from PROCESS_MONITOR_STATISTIC PMS
JOIN PROCESS_MONITOR PM ON PM.ID=PMS.PROCESS_MONITOR_ID
WHERE PM.ENABLED=1 AND PM.NAME= 'WORKFLOWENGINE1'
order by PMS.PROCESS_START_DATE desc
)
where ROWNUM = 1
答案 0 :(得分:1)
您可以这样做:
--in case you are working with dates
select trunc(abs(to_date('26/01/2015 08:00:00','dd/mm/yyyy hh:mi:ss') - sysdate)*24*60) from dual;
这表示日期与现在(sysdate)之间的分钟差异。
--timestamp case
select abs(
extract (day from diff)*24*60 + extract (hour from diff)*60 + extract (minute from diff)) from
(select to_timestamp('27/01/2015 09:07:00','dd/mm/yyyy hh:mi:ss') - systimestamp diff from dual);
这表示日期与现在(systimestamp)与时间戳之间的分钟差异。
修改强>
此查询计算一年中的分钟数:
select 365*24*60 from dual -- this returns 525600
这是您的查询。我改变了时间。检查这些日期之间的差异是一年零五分钟
select trunc(abs((to_date('26/01/14 09:00:00','dd/mm/yy hh24:mi:ss')-
to_date('26/01/2015 09:05:01','dd/mm/yyyy hh24:mi:ss'))*24*60)) from dual;
因此,运行时此查询结果为525605
,超过一年五分钟。所以它看起来很有效。