在这里,我的表包含带有日期作为数据类型的tdate列。假设我要使用where条件删除数据,我的min(tdate)-21-02-19和max(tdate)-25-02-19:-where
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')
在此我提交了txn之后,我要删除21-02-19的数据 在这里,我选择min(tdate),然后显示tdate 21-02-19而不是显示22-02-19(这是我不期望的) 在上面的删除命令之后,如果我使用条件条件tdate = '21 -02-19'进行删除; 承诺 然后删除一些txn,然后显示我期望的min(tdate)= 22-02-19
请提供针对此类问题的解决方案 我认为数据以不同的tdate形式插入
答案 0 :(得分:0)
最好将trunc
函数用作
delete tab where trunc(tdate) = date'2019-02-21'
顺便说一句,在您所处的条件下,该日期的时间点'2019-02-21 00:00:00'
丢失了。
答案 1 :(得分:0)
这是您问题的根源:
tdate between TO_DATE('2019-02-21 00:00:01', 'YYYY-MM-DD HH24:MI:SS') and ...
-----------------------------------------^
您的日期范围从午夜1秒钟开始。因此,您的DELETE语句将不会命中任何在恰好午夜创建的记录,或日期没有明确的时间元素(例如trunc(sysdate)
)的记录。
约会时间可能会导致颈部疼痛。 BETWEEN会使情况变得更糟,因为它执行的上限小于等于 。定义这些范围的最干净方法是对每个范围进行显式测试,分别使用大于或等于和小于:
where tdate >= date '2019-02-21'
and tdate < date '2019-02-22'