Oracle:日期时间减法

时间:2016-05-23 13:11:58

标签: sql oracle date

我必须以当前( sysdate )和修改时间计算时差(以分钟为单位): -

to_date(to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')
- to_date(to_char(modified, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')

但问题是 to_char 返回正确的时间: -

to_char(whenmodified, 'YYYY-MM-DD HH24:MI:SS')

输出2016-05-23 14:55:50

to_date 没有显示时间: -

to_date(to_char(modified, 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD HH24:MI:SS')

输出:2016-05-23

请将to_char转换为to_date,以协助我获取时差。

注:

  1. 我无法执行 sysdate-modified ,因为sysdate和modified都会给出日期,例如2016-05-23

  2. 使用to_char进行sysdate或修改时给出日期时间2016-05-23 14:55:50

  3. 由于我们无法在to_char函数中减去日期,所以我再次将它们转换回to_date以获取时间。

  4. 我期待: 2016-05-23 14:55:50 - 2016-05-23 14:53:50 = 2分钟

1 个答案:

答案 0 :(得分:3)

  

我必须从当前(sysdate)和修改时间

计算分钟的时差

Oracle安装程序

CREATE TABLE table_name ( modified DATE );

INSERT INTO table_name
SELECT TIMESTAMP '2016-05-23 14:20:00' FROM DUAL UNION ALL
SELECT TIMESTAMP '2016-05-23 00:00:00' FROM DUAL UNION ALL
SELECT TIMESTAMP '2016-05-01 00:00:00' FROM DUAL UNION ALL
SELECT TIMESTAMP '2016-01-01 00:00:00' FROM DUAL;

<强>查询

SELECT ( sysdate - modified ) * 24 * 60 AS minute_difference
FROM   table_name;

<强>输出

MINUTE_DIFFERENCE
-----------------
       3.66666667 
       863.666667 
       32543.6667 
       206783.667 

并提出你的意见:

  

to_date不显示时间

日期始终有时间组件,从不在数据库内部有格式(由7 or 8 bytes表示) - 日期的格式由用于访问数据库的客户端程序完成(通常默认情况下不显示时间组件 - 但是,时间组件仍然存在)。

您可以在客户端程序的偏好设置中更改此设置,或者,如果他们不使用它来控制它,则可以通过更改NLS_DATE_FORMAT会话参数:

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';