我正在尝试从表中删除给定日期的行.目前,它仅在我按如下方式格式化时才有效:
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行".如果某一天的大量条目都发生在不同的时间,那么输入每个条目的确切时间以便全部删除它们是不可行的,尤其是在时间不能自动显示的情况下.
该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)
...这与你从我的查询得到的计划类似; 除了它使用<=而不是<.效果是相同的(只要它是日期字段而不是时间戳).