Невозможно получить записи о дате Oracle - PullRequest
1 голос
/ 21 февраля 2020

База данных - Таблица

 PROD.APPLICATION 
Game ID    Generated Date

 1          Jan-01-1995
 2          Aug-19-2003
 3          Nov-04-2001
 4          Sep-26-2007
 5          Sep-26-2007
 6          Sep-26-2007
 7          Sep-19-2007
 8          Sep-19-2007
 9          Sep-19-2007
10          Jan-11-1985
11          MAY-19-2003
12          Sep-22-2007
13          Sep-22-2007

Я выполнил следующий запрос

SELECT *
FROM PROD.APPLICATION JOIN PROD.STATUS ON (PROD.STATUS_ID = REF_STATUS.STATUS_ID)  

AND PROD.APPLICATION.GENERETED_DT >= to_date('2007-09-19', 'yyyy-MM-dd') AND     
    PROD.APPLICATION.GENERETED_DT <= to_date('2007-09-26', 'yyyy-MM-dd');

, чтобы найти записи с 19 сентября 2007 г. по 26 сентября 2007 г. ie 8 записей.

В результате были показаны только записи за 19 сентября 2007 г. и 22 сентября 2007 г. ie только 5 записей

Actual Output
Game ID    Generated Date
7 Sep-19-2007
8 Sep-19-2007
9 Sep-19-2007
12 Sep-22-2007
13 Sep-22-2007

Как создать поисковый запрос, чтобы я мог получить все 8 записей - ie записи в эти даты, а также

Ожидаемый результат

 4 Sep-26-2007
 5 Sep-26-2007
 6 Sep-26-2007
 7 Sep-19-2007
 8 Sep-19-2007
 9 Sep-19-2007
12 Sep-22-2007
13 Sep-22-2007

Пробный

SELECT *
FROM PROD.APPLICATION JOIN PROD.STATUS ON (PROD.STATUS_ID = REF_STATUS.STATUS_ID)  

AND PROD.APPLICATION.GENERETED_DT >= to_date('2007-09-19', 'yyyy-MM-dd') AND     
    PROD.APPLICATION.GENERETED_DT = to_date('2007-09-26', 'yyyy-MM-dd');

Восстановлено Нет записей

Ответы [ 2 ]

1 голос
/ 21 февраля 2020

Это усекает временную часть в APPLICATION.GENERETED_DT, а затем сравнивает ее с датой с правой стороны.


SELECT *
FROM PROD.APPLICATION JOIN PROD.STATUS ON (PROD.STATUS_ID = REF_STATUS.STATUS_ID)  
AND trunc(PROD.APPLICATION.GENERETED_DT) >= to_date('2007-09-19', 'yyyy-MM-dd') AND     
    trunc(PROD.APPLICATION.GENERETED_DT) <= to_date('2007-09-26', 'yyyy-MM-dd');
0 голосов
/ 21 февраля 2020

Дата, вероятно, имеет компонент времени. Это часть типа данных date в Oracle, но часто не отображается при запросе.

В лучшем подходе используются следующие логики c:

SELECT *
FROM PROD.APPLICATION A JOIN
     PROD.STATUS S
     ON A.STATUS_ID = S.STATUS_ID  
WHERE A.GENERATED_DT >= DATE '2007-09-19' AND
      A.GENERATED_DT < DATE '2007-09-27';

Примечания:

  • < DATE '2007-09-27' будет включать все даты и даты предыдущего дня.
  • Ключевое слово DATE вводит константы даты в формате YYYY-MM-DD.
  • Псевдонимы таблиц облегчают написание и чтение запроса.
  • Перемещение условия в предложение WHERE не влияет на запрос, но такая фильтрация чаще всего выполняется в WHERE пункт для INNER JOIN.
...