oracle - 如何从 Oracle 数据库中选择 2 个日期不在同一月份和年份的记录
问题描述
如何从 Oracle 数据库中选择两个日期不在同一月份和年份的记录。
下表是示例,这里我想要创建日期和更新日期不在同一月份和年份的所有记录。
以毫秒为单位的日期字段的值(例如 1454738400000)和两个日期字段的数据类型均为 NUMBER(32)。
---------------------------------
id| Created Date | Updated Date |
---------------------------------
1 | 02/26/2018 | 02/26/2017 |
---------------------------------
2 | 03/28/2018 | 03/26/2018 |
---------------------------------
3 | 04/26/2018 | 04/28/2017 |
---------------------------------
4 | 02/26/2018 | 02/26/2016 |
---------------------------------
解决方案
看看这两个选项:
select record_id
from your_table
where to_char(created_date, 'mm.yyyy') <> to_char(updated_date, 'mm.yyyy');
select record_id
from your_table
where trunc(created_date, 'yyyy') <> trunc(updated_date, 'yyyy')
and trunc(created_date, 'mm') <> trunc(updated_date, 'mm');
如果涉及大量数据,请考虑在 DATE 列上创建基于函数的索引。
[编辑]
如果这些值确实是数字,那么您必须先将它们转换为 DATE 数据类型,然后再应用TRUNC
函数。例如:
SQL> select trunc(to_date(20190226, 'yyyymmdd'), 'yyyy') result from dual;
RESULT
----------
01.01.2019
SQL>
请注意,如果格式错误,例如 20190231(应该是 2019 年 2 月 31 日),它将失败,因为 2 月没有 31 天。
如果可能,将这些列的数据类型更改为 DATE。
推荐阅读
- r - k原型的实现
- excel - 复制并粘贴到不同的工作表和列
- c# - 为什么 ToList 可以修改原始值而不重新分配给自己?
- python - 发送自动邮件
- node.js - NodeJs & Mongodb:无法更新(补丁)。返回成功但不改变任何东西
- javascript - 使用 Openlayers 和 JQuery 使用复选框停用脚本
- mongodb - 我的数据库连接使用后台上下文,我的游标应该使用什么上下文进行聚合查询?去做()?
- javascript - 配置项目 ':app' ionic 时出现问题
- qt - 不能在 qt creator 中使用单引号
- python - 如何使用 joblib 并行化 scipy fftconvolve?