sql - 如何在 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
缺少时间部分,这使我无法与表中创建的时间进行比较请帮助我完成此任务。
解决方案
如果您1
从date
数据类型(例如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;
推荐阅读
- elasticsearch - 弹性搜索中多个字段的单词搜索
- c# - 如何在 IDictionary 中制作动态值
- android - 不支持 Android 11(R) 的 NDK 构建
- php - 如果在 WooCommerce 中满足条件,则尝试隐藏添加费用文本
- javascript - 使输入字段能够多次填写
- python - 如何使用 selenium python 登录谷歌账户
- r - 在前后观察变异虚拟变量
- angular - ng-select 在移动设备上具有更好的渲染效果
- java - 如何在原生 android 中嵌入多个统一模块?
- android - 尽管数据库中有值,但调试器在 Android Studio 中显示空值