该trunc()
函数将日期截断到指定的时间段;所以trunc(sysdate,'mm')
会返回当月的开始。然后,您可以使用该add_months()
函数获取上个月的开始时间,如下所示:
select count(distinct switch_id)
from xx_new.xx_cti_call_details@appsread.prd.com
where dealer_name = 'XXXX'
and creation_date >= add_months(trunc(sysdate,'mm'),-1)
and creation_date < trunc(sysdate, 'mm')
作为一个小方面,您没有在原始查询中明确转换为日期。总是这样做,要么使用日期文字,例如DATE 2012-08-31
,要么使用to_date()
函数,例如to_date('2012-08-31','YYYY-MM-DD')
。如果你不这样做,那么你一定会在某些时候犯错。
您不会使用sysdate - 15
,因为这将提供当前日期前 15 天的日期,这似乎不是您所追求的。它还将包括一个时间组件,因为您不使用trunc()
.
就像一个小演示trunc(<date>,'mm')
一样:
select sysdate
, case when trunc(sysdate,'mm') > to_date('20120901 00:00:00','yyyymmdd hh24:mi:ss')
then 1 end as gt
, case when trunc(sysdate,'mm') < to_date('20120901 00:00:00','yyyymmdd hh24:mi:ss')
then 1 end as lt
, case when trunc(sysdate,'mm') = to_date('20120901 00:00:00','yyyymmdd hh24:mi:ss')
then 1 end as eq
from dual
;
SYSDATE GT LT EQ
----------------- ---------- ---------- ----------
20120911 19:58:51 1