Как выбрать записи из базы данных Oracle, где 2 даты не совпадают с месяцем и годом - PullRequest
0 голосов
/ 26 февраля 2019

Как выбрать записи из базы данных Oracle, где 2 даты не совпадают с месяцем и годом.

Ниже приведен пример таблицы, здесь я хочу, чтобы все записи, в которых дата создания и дата обновления не совпадали, игод.

Значение поля даты в миллисекундах (например, 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   |
---------------------------------

1 Ответ

0 голосов
/ 26 февраля 2019

Посмотрите на эти два варианта:

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.

[EDIT]

Если эти значения действительно являются числами, то сначала необходимо преобразовать их в тип данных DATE, а затем применить функцию TRUNC.Например:

SQL> select trunc(to_date(20190226, 'yyyymmdd'), 'yyyy') result from dual;

RESULT
----------
01.01.2019

SQL>

Обратите внимание, что произойдет сбой, если формат будет неправильным, например 20190231 (который должен быть 31 февраля 2019 года), поскольку в феврале нет 31 дня.

Если возможно, измените тип данных этих столбцов на DATE.

...