Моя таблица содержит столбец tdate, дату типа данных - PullRequest
0 голосов
/ 18 мая 2019

Здесь моя таблица содержит столбец tdate с датой в виде типа данных. Предположим, что я удаляю данные, используя условие where, мои min (tdate) - 21-02-19 и max (tdate) - 25-02-19: - где

tdate between TO_DATE('2019-02-21 00:00:01', 'YYYY-MM-DD HH24:MI:SS') and TO_DATE('2019-02-21 23:59:59', 'YYYY-MM-DD HH24:MI:SS') 

Здесь я удаляю свои 21-02-19 данные, после чего я зафиксировал свой txn Здесь я выбираю min (tdate), тогда он показывает tdate 21-02-19 вместо того, чтобы показывать 22-02-19 (чего я не ожидаю) И после вышеупомянутой команды удаления, если я удаляю, используя это, где условие tdate = '21 -02-19 '; совершить Затем некоторые txn удалены, а затем показывает min (tdate) = 22-02-19, что я ожидаю

Пожалуйста, предоставьте решение этой проблемы Я думаю, что данные вставляются в другой форме tdate

Ответы [ 2 ]

0 голосов
/ 19 мая 2019

Вот корень вашей проблемы:

tdate between TO_DATE('2019-02-21 00:00:01', 'YYYY-MM-DD HH24:MI:SS') and ...
-----------------------------------------^

Ваш диапазон дат начинается в одну секунду после полуночи.Следовательно, ваш оператор DELETE не будет попадать ни в какие записи, созданные ровно в полночь или имеющие дату без явного элемента времени, такого как trunc(sysdate).

. Дата и время могут причинять боль в шею.МЕЖДУ ухудшает ситуацию, потому что выполняет меньше или равно со своей верхней границей.Самый чистый способ определить эти диапазоны - использовать явные тесты для каждой границы, используя больше или равно и меньше соответственно:

where tdate >= date '2019-02-21'
and tdate < date '2019-02-22'
0 голосов
/ 18 мая 2019

Лучше использовать функцию trunc как

delete tab where trunc(tdate) = date'2019-02-21'

между прочим, в ваших условиях, где для этого дня отсутствует точка времени '2019-02-21 00:00:00'.

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