我的表包含tdate列,数据类型为date

时间:2019-05-18 13:40:05

标签: sql oracle

在这里,我的表包含带有日期作为数据类型的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形式插入

2 个答案:

答案 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'