ДАТА запрашивает, используя МЕЖДУ на представлении оракула - PullRequest
0 голосов
/ 19 ноября 2018

У меня проблема с запросом параметра даты с использованием оператора «Между» в представлении оракула, когда я делаю этот запрос:

SELECT * 
FROM MY_VIEW 
WHERE STATUS = 'Active' 
AND CHECKER_DATE BETWEEN to_date(sysdate - 1, 'DD-MON-YY') AND to_date(sysdate, 'DD-MON-YY');

он не дает мне записи (на самом деле у меня есть какая-либо запись она эту дату).

Я пытаюсь использовать оператор 'in', но все равно не даю мне записи.

Пожалуйста, предоставьте некоторую информацию для этого.

* checker_date определено как дата

Ответы [ 3 ]

0 голосов
/ 19 ноября 2018

Вы можете попробовать:

SELECT * 
FROM MY_VIEW 
WHERE STATUS = 'Active' 
AND CHECKER_DATE BETWEEN trunc(sysdate - 1) AND trunc(sysdate);

Oracle рекомендует не использовать to_date для даты.Также здесь есть trunc, потому что Trunc удаляет компонент времени.

0 голосов
/ 19 ноября 2018

может быть записями, которые не являются «активными» или «активными», а не несуществующим значением в одной из справочных таблиц, если таковые имеются, и trunc (sysdate -1) и trunc (sysdate) помогут

0 голосов
/ 19 ноября 2018

Ваша первая ошибка - вызвать to_date () для значения, которое уже является DATE.to_date() ожидает значение VARCHAR, поэтому sysdate будет сначала преобразовано в VARCHAR, а затем немедленно преобразовано обратно в значение DATE, с которого оно должно было начинаться.

Вы, вероятно, хотите

AND CHECKER_DATE BETWEEN trunc(sysdate) - 1 AND trunc(sysdate)

Скорее всего, это все равно не даст вам желаемого результата, поскольку не включает строки из "сегодня".trunc(sysdate) означает «сегодня в полночь», и любая строка, созданная сегодня после полуночи, не будет включена.Со значениями даты / времени (а тип Oracle DATE содержит время, несмотря на имя), лучше не использовать BETWEEN, а вместо этого использовать явные операторы диапазона:

AND CHECKER_DATE >= trunc(sysdate) - 1 
AND CHECKER_DATE < trunc(sysdate) + 1

trunc(sysdate) + 1 завтра в полночь, поэтомулюбое значение, которое (строго) меньше, чем это «сегодня».


Все вышеперечисленное предполагает, что CHECKER_DATE определяется как DATE или TIMESTAMP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...