在 Delete 语句中处理 SYSDATE |甲骨文

问题描述

目前,以下代码从 12-APR-2019 开始从我的表中删除回溯数据

DELETE FROM XYZ WHERE check_date < ADD_MONTHS (SYSDATE,-24);

如何修改代码,以便表格存储整个四月的数据,即表格需要从 01-APR-2019 开始的值并删除以前的日期数据(从 31-MAR-2019 开始)

谢谢!

解决方法

如何修改代码,以便表格存储整个四月的数据,即表格需要从 01-APR-2019 开始的值并删除以前的日期数据(从 31-MAR-2019 开始)

delete from xyz where check_date < date '2019-04-01'

是最明显的解决方案。


如果您必须使用 sysdate,也许您想将它截断到月:

DELETE FROM XYZ WHERE check_date < ADD_MONTHS (trunc(SYSDATE,'mm'),-24);

因为

SQL> select add_months(sysdate,-24) your_result,2         add_months(trunc(sysdate,-24) my_result
  3  from dual;

YOUR_RESULT         MY_RESULT
------------------- -------------------
12.04.2019 10:14:30 01.04.2019 00:00:00

SQL>
,
trunc( sysdate,'MM' )

返回当月第一天的午夜。所以

add_months( trunc( sysdate,'MM' ),-24 )

如果今天(2021 年 4 月 12 日)运行,将返回 2019 年 4 月 1 日。所以你只需要

DELETE FROM XYZ 
 WHERE check_date < add_months( trunc( sysdate,-24 )