Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 删除Oracle数据库中的旧数据_Sql_Database_Oracle_Oracle11g_Sql Delete - Fatal编程技术网

Sql 删除Oracle数据库中的旧数据

Sql 删除Oracle数据库中的旧数据,sql,database,oracle,oracle11g,sql-delete,Sql,Database,Oracle,Oracle11g,Sql Delete,我是数据库的新手,我需要你们的帮助 我想删除Oracle数据库中除最近数据以外的行 例如: 删除截至昨天的数据,不想删除数据库中今天的数据 考虑一个有5行的表,其中2行是最近添加的。我希望2行保持不变,并删除剩下的两行 A B C- Row D 1 2 3 - old data E 4 5 6 - old data F 7 8 9 - old data G 3 2 1 - New data Entered today H 6 3 2 - New data Enter

我是数据库的新手,我需要你们的帮助

我想删除Oracle数据库中除最近数据以外的行

例如: 删除截至昨天的数据,不想删除数据库中今天的数据

考虑一个有5行的表,其中2行是最近添加的。我希望2行保持不变,并删除剩下的两行

A B C- Row

D   1 2 3 - old data

E   4 5 6 - old data

F   7 8 9 - old data

G   3 2 1 - New data Entered today

H   6 3 2 - New data Entered today
我想删除D、E和F行。今天输入的数据不会被删除,应该保持不变

谁能帮我拿一下这些吗

考虑一个有5行的表,其中最近添加了2行

当您说“今天”时,我假设您的表中有一个日期列,可以准确地告诉您插入行的时间

让我们举一个简单的例子来了解如何删除表中的旧行

假设我有一张桌子:

现在我想删除比今天日期早的行。今天的日期是:

SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
---------
04-MAR-15
现在这里有一个问题,sysdate将有datetime元素。因此,您需要明确您是只想要被截断的日期部分,还是想要将其与时间部分一起保留

SQL> SELECT to_char(SYSDATE, 'MM/DD/YYYY HH24:MI:SS') FROM DUAL;

TO_CHAR(SYSDATE,'MM
-------------------
03/04/2015 10:24:17

SQL>
因此,简单地使用SYSDATE将过滤日期值小于SYSDATE的所有行。您需要使用TRUNC来确保根据日期部分过滤行,而不考虑时间部分

SQL> DELETE FROM t WHERE edate < TRUNC(SYSDATE);

12 rows deleted.

SQL> SELECT * FROM t;

     EMPNO ENAME          DEPTNO EDATE
---------- ---------- ---------- ---------
      7566 JONES              20 04-MAR-15
      7654 MARTIN             30 04-MAR-15

现在,有关日期的较旧行将被删除。其余的行是今天插入的。

听起来很容易筛选今天未更新的条目。您尝试了什么?您的行是否有一个列来标识行的创建时间?您如何指定哪些数据属于哪个日期?感谢Lalit Kumar B的回复,但我没有包含日期的列。有没有办法删除这个?谢谢,您需要提供表格详细信息。有哪些栏目?过滤要删除的行的规则是什么?
SQL> DELETE FROM t WHERE edate < TRUNC(SYSDATE);

12 rows deleted.

SQL> SELECT * FROM t;

     EMPNO ENAME          DEPTNO EDATE
---------- ---------- ---------- ---------
      7566 JONES              20 04-MAR-15
      7654 MARTIN             30 04-MAR-15