この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')
。そうしないと、ある時点でこれを間違えることになります。
現在の日付の15日前の日付が提供されるため、使用sysdate - 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