此过程适用于第一次约会,但不会从第二次约会中删除符合要求的任何内容
This procedure works great for the first date but it doesn't remove anything matching the requirement from the second date
DELETE FROM HERAPERM.SCRUBLITST
WHERE
COALESCE
(
SUBSTR (ODUDAT, 1, 2) || SUBSTR (ODUDAT, 3, 2) || SUBSTR (ODUDAT, 5, 2)
, SUBSTR (ODCDAT, 1, 2) || SUBSTR (ODCDAT, 3, 2) || SUBSTR (ODCDAT, 5, 2)
) > TO_CHAR (CURRENT_DATE - 2 MONTHS, 'MMDDYY');
ODUDAT 最后一次使用。第二个日期是 ODCDAT,它是创建日期。数据的格式为 MMDDYY。我需要删除上次使用日期早于两个月的日期行。如果文件是在最近两个月内创建但未使用过的,则需要将其保留在文件中。该文件包含 6893 行。当我使用上面的代码时,我得到 536 行。它从 ODUDAT 中删除旧项目但不触及 ODCDAT。此外,如果 ODUDAT 为空,则它会恢复为 ODUDAT。我不确定如何在代码中处理它。
示例数据
A210407001 *文件 DDMF 040821 BYOD_00003 *文件 PF 021521 021621 DPI2194LO1 *文件 LF 041221 DPI2194LO2 *文件 LF 041221 DSLAMPORT1 *文件 PF 021521 021521 FIXPHYADR1 *=2112LF] –[04
DELETE FROM HERAPERM.SCRUBLITST
WHERE
COALESCE
(
NULLIF
(
SUBSTR (ODUDAT, 5, 2) || SUBSTR (ODUDAT, 1, 4)
, ''
)
, SUBSTR (ODCDAT, 5, 2) || SUBSTR (ODCDAT, 1, 4)
) < TO_CHAR (CURRENT_DATE - 2 MONTHS, 'YYMMDD');
您使用这些 SUBSTR 将列中日期的 MMDDYY
表示形式(如您在数据示例中所示)转换为 YYMMDD
。然后将它与当前日期减去 2 个月的相同字符串表示形式进行比较。如果需要删除日期较早的行,则需要 <
.
这里是 dbfiddle link 和带有相同 WHERE 子句的 SELECT 语句(即它选择应该删除的行)。您可以编辑 link 中的示例,使用一些指向某行的新示例数据,该行要么被错误删除,要么未被删除。
DELETE FROM HERAPERM.SCRUBLITST
WHERE
COALESCE
(
SUBSTR (ODUDAT, 1, 2) || SUBSTR (ODUDAT, 3, 2) || SUBSTR (ODUDAT, 5, 2)
, SUBSTR (ODCDAT, 1, 2) || SUBSTR (ODCDAT, 3, 2) || SUBSTR (ODCDAT, 5, 2)
) > TO_CHAR (CURRENT_DATE - 2 MONTHS, 'MMDDYY');
ODUDAT 最后一次使用。第二个日期是 ODCDAT,它是创建日期。数据的格式为 MMDDYY。我需要删除上次使用日期早于两个月的日期行。如果文件是在最近两个月内创建但未使用过的,则需要将其保留在文件中。该文件包含 6893 行。当我使用上面的代码时,我得到 536 行。它从 ODUDAT 中删除旧项目但不触及 ODCDAT。此外,如果 ODUDAT 为空,则它会恢复为 ODUDAT。我不确定如何在代码中处理它。
示例数据 A210407001 *文件 DDMF 040821 BYOD_00003 *文件 PF 021521 021621 DPI2194LO1 *文件 LF 041221 DPI2194LO2 *文件 LF 041221 DSLAMPORT1 *文件 PF 021521 021521 FIXPHYADR1 *=2112LF] –[04
DELETE FROM HERAPERM.SCRUBLITST
WHERE
COALESCE
(
NULLIF
(
SUBSTR (ODUDAT, 5, 2) || SUBSTR (ODUDAT, 1, 4)
, ''
)
, SUBSTR (ODCDAT, 5, 2) || SUBSTR (ODCDAT, 1, 4)
) < TO_CHAR (CURRENT_DATE - 2 MONTHS, 'YYMMDD');
您使用这些 SUBSTR 将列中日期的 MMDDYY
表示形式(如您在数据示例中所示)转换为 YYMMDD
。然后将它与当前日期减去 2 个月的相同字符串表示形式进行比较。如果需要删除日期较早的行,则需要 <
.
这里是 dbfiddle link 和带有相同 WHERE 子句的 SELECT 语句(即它选择应该删除的行)。您可以编辑 link 中的示例,使用一些指向某行的新示例数据,该行要么被错误删除,要么未被删除。