如何在时间未知时按日期删除行

sam*_*amo 3 sql oracle

我正在尝试从表中删除给定日期的行.目前,它仅在我按如下方式格式化时才有效:

delete from table_name 
where date_entered = to_date('20-SEP-15 11:10:35', 'dd-MON-yy hh:mi:ss');
Run Code Online (Sandbox Code Playgroud)

如果我省去时间,它只返回"删除0行".如果某一天的大量条目都发生在不同的时间,那么输入每个条目的确切时间以便全部删除它们是不可行的,尤其是在时间不能自动显示的情况下.

Ale*_*ole 5

between方法的工作原理,但我更喜欢:

delete from table_name
where date_entered >= to_date('20-SEP-15', 'dd-MON-yy') 
and date_entered < to_date('21-SEP-15', 'dd-MON-yy');
Run Code Online (Sandbox Code Playgroud)

Oracle转换为该窗体:

explain plan for
delete from table_name
where date_entered between to_date('20-SEP-15 00:00:00', 'dd-MON-yy hh:mi:ss') 
and to_date('20-SEP-15 23:59:59', 'dd-MON-yy hh:mi:ss');

select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT                                                                                                       
------------------------------------------------------------------------------------------------------------------------
Plan hash value: 4143694936

---------------------------------------------------------------------------------
| Id  | Operation          | Name       | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------
|   0 | DELETE STATEMENT   |            |     1 |     9 |     1   (0)| 00:00:01 |
|   1 |  DELETE            | TABLE_NAME |       |       |            |          |
|*  2 |   FILTER           |            |       |       |            |          |
|*  3 |    INDEX RANGE SCAN| INDEX_NAME |     1 |     9 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------


PLAN_TABLE_OUTPUT                                                                                                       
------------------------------------------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter(TO_DATE('20-SEP-15 23:59:59','dd-MON-yy 
              hh:mi:ss')>=TO_DATE('20-SEP-15 00:00:00','dd-MON-yy hh:mi:ss'))
   3 - access("DATE_ENTERED">=TO_DATE('20-SEP-15 00:00:00','dd-MON-yy 
              hh:mi:ss') AND "DATE_ENTERED"<=TO_DATE('20-SEP-15 23:59:59','dd-MON-yy 
              hh:mi:ss'))
Run Code Online (Sandbox Code Playgroud)

...这与你从我的查询得到的计划类似; 除了它使用<=而不是<.效果是相同的(只要它是日期字段而不是时间戳).

  • 亚历克斯,很高兴看到你仍在积极贡献.伟大的伴侣! (4认同)