如何从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 |
---------------------------------
答案 0 :(得分:0)
看看这两个选项:
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。