首页 > 解决方案 > 如何在 Oracle 中从当前时间返回 24 小时

问题描述

我的 Oracle 数据库中有一个列,它以以下格式 30-NOV-20 11.49.11.000000000 AM(TIMESTAMP(6) 格式)记录用户的创建时间。我想做的是选择所有创建时间比当前时间早 24 小时的记录所以我要做的是从当前时间减去 1 并进行比较。但是当我减去 1 时,它只返回日期。

select * from user where created_date < SYSTIMESTAMP-1

dbms_output.put_line (SYSTIMESTAMP-1);-->29-NOV-20

缺少时间部分,这使我无法与表中创建的时间进行比较请帮助我完成此任务。

标签: sqloracleoracle11gtimestamp

解决方案


如果您1date数据类型(例如sysdate)中减去,它会让您后退一天。但是,如果从timestamp数据类型值中减去它,Oracle 会将其转换为日期并返回一个日期(此外,它会被截断)。

请参见以下示例:

SQL> select
  2    systimestamp val1,
  3    systimestamp - 1 val2,
  4    --
  5    systimestamp - interval '1' day val3
  6  from dual;

VAL1
-----------------------------------------------------
VAL2
--------
VAL3
-----------------------------------------------------
30.11.20 09:55:01,439352 +01:00
29.11.20
29.11.20 09:55:01,439352000 +01:00


SQL>

所以,你应该做的是减去一个区间,即

select *
from user
where created_date < systimestamp - interval '1' day;

推荐阅读