首页 > 解决方案 > oracle如何获取上个月或上两个月的数据

问题描述

如何在 oracle 中获取上个月或上两个月的数据。我的日期格式是 YYYY、MM、DD。

从谷歌搜索我得到了那些解决方案,

select * from IM_LAPTOP
where ADD_DATE >= add_months(sysdate, -12);

select *   
  from IM_LAPTOP
 where ADD_DATE between add_months(trunc(sysdate,'mm'),-1) and last_day(add_months(trunc(sysdate,'mm'),-1));

但它显示不是一个有效的月份

标签: oracleoracle-apex

解决方案


我的日期格式是 YYYY,MM,DD

除非您使用字符串来存储日期,否则,不,它不是;aDATE是二进制数据类型(由 1 字节组成:世纪、世纪年、月、日、小时、分钟和秒,并且始终具有这些组件)并且没有格式。

oracle如何获取上个月或上两个月的数据

要从该时刻之前的 2 个月获取数据(即,如果现在是现在2021-04-05 16:39:24并且您希望从2021-02-05 16:39:242 个月前获取),那么:

SELECT *
FROM   your_table
WHERE  date_column >= ADD_MONTHS( SYSDATE, -2 )

要获取从上个月第一天午夜开始的数据:

SELECT *
FROM   your_table
WHERE  date_column >= ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), -1 )

如果您只想要上个月的数据,那么:

SELECT *
FROM   your_table
WHERE  date_column >= ADD_MONTHS( TRUNC( SYSDATE, 'MM' ), -1 )
AND    date_column <  TRUNC( SYSDATE, 'MM' )

如果您的“日期”实际上是VARCHAR2具有格式的列,YYYY,MM,DD那么您应该将其更改为DATE列,但如果由于某种原因您不能,那么至少这些字符按重要性从高到低的顺序排列,您可以执行字母数字比较和只需将过滤器的右侧包装在TO_CHAR

SELECT *
FROM   your_table
WHERE  date_column >= TO_CHAR( ADD_MONTHS( SYSDATE, -2 ), 'YYYY,MM,DD' )

推荐阅读