Oracle 获取 mydate >= sysdate - 1 年的所有行

Oracle get all rows where mydate >= sysdate - 1 year

我有一个 DAY_DATE 列,其中包含诸如“11-2-2021”之类的值。我想提取值在去年或更高年内的行。这意味着当前日期是 11-3-2022,这意味着我想要获取日期为 11-3-2021 或更早的所有行。

我尝试了以下方法:

SELECT * FROM TABLE_A
WHERE 1=1
AND TO_CHAR(DAG_DATUM_VERZONDEN, 'YYYYIW') >= TO_CHAR(SYSDATE, 'IYYYIW') - 52

但是,这不起作用,因为您不能总是减去 52 周。例如。当您处于 2022 年的第 10 周时,您只能减去 2022(它将不包括 2021 年的任何内容,因为它不包括年份的变化)。我再次尝试做其他事情:

SELECT * FROM TABLE_A
WHERE 1=1
AND TO_CHAR(DAG_DATUM_VERZONDEN, 'YYYYMM') >= to_char(trunc(add_months(SYSDATE,-12),'YEAR'),'YYYYMM') 

但是,这 return 从 2021 年开始的所有内容,不一定是高于 11-3-2021 的行。还有其他人知道这个问题的答案吗?提前感谢您的帮助。

如果 DAG_DATUM_VERZONDEN 列的数据类型是 DATE(应该是;我希望不是 VARCHAR2),那么

SELECT *
  FROM table_a
 WHERE dag_datum_verzonden >= ADD_MONTHS (TRUNC (SYSDATE), -12)

如果您确实将日期存储为字符串(再一次,坏主意),则首先将其(字符串)转换为有效的日期值:

 WHERE TO_DATE(dag_datum_verzonden, 'dd-mm-yyyy') >= ADD_MONTHS (TRUNC (SYSDATE), -12)