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

标签 sql oracle

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

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

如果我省略了时间,它只会返回“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');

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'))

...这与您从我的查询中获得的计划类似;除了它使用 <=而不是 < .效果是一样的(只要它是日期字段而不是时间戳)。

关于sql - 如何在时间未知时按日期删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160021/

相关文章:

mysql - SQL 计数与 SELECT 子句中的另一个表

mysql - 仅将 datetime 中的日期放入 where sql

mysql - 计算 Oracle 表中特定值之间模式的出现次数

sql - ORACLE 约束允许空值,IF

sql - 我是否必须写入 "GO"字才能执行 SQL Server 语句?

java - 使用 Maven 的 Oracle JDBC 项目 : runs fine in IDE but ClassNotFoundException in command-line

Oracle PL/SQL : ORA-06502 error when assigning a string to a raw variable

sql - 如何在 Rails 中完成深度条件查询?

mysql - My SQL 查询获取唯一记录

mysql - 将所有查询结果记录到 MySQL 中