我必须以当前( 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,以协助我获取时差。
注:
我无法执行 sysdate-modified ,因为sysdate和modified都会给出日期,例如2016-05-23
使用to_char进行sysdate或修改时给出日期时间2016-05-23 14:55:50
由于我们无法在to_char函数中减去日期,所以我再次将它们转换回to_date以获取时间。
我期待: 2016-05-23 14:55:50 - 2016-05-23 14:53:50 = 2分钟
答案 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';