Saltar al contenido

Función de fecha de Oracle para el mes anterior

Investigamos por diferentes espacios para traerte la solución a tu dilema, si tienes alguna pregunta puedes dejarnos la pregunta y respondemos sin falta.

Solución:

Modificando un poco la consulta de Ben,

 select count(distinct switch_id)   
  from [email protected]  
 where dealer_name =  'XXXX'    
   and creation_date between add_months(trunc(sysdate,'mm'),-1) and last_day(add_months(trunc(sysdate,'mm'),-1))

Él trunc() función trunca una fecha al período de tiempo especificado; asi que trunc(sysdate,'mm') devolvería el comienzo del mes actual. A continuación, puede utilizar el add_months() función para obtener el comienzo del mes anterior, algo como esto:

select count(distinct switch_id)   
  from [email protected]  
 where dealer_name =  'XXXX'    
   and creation_date >= add_months(trunc(sysdate,'mm'),-1) 
   and creation_date < trunc(sysdate, 'mm')

Como un lado pequeño no eres explícitamente convertir a una fecha en su consulta original. Siempre hacer esto, ya sea usando un literal de fecha, por ejemplo DATE 2012-08-31o el to_date() función, por ejemplo to_date('2012-08-31','YYYY-MM-DD'). Si no lo hace, es probable que se equivoque en algún momento.

no usarías sysdate - 15 ya que esto proporcionaría la fecha 15 días antes de la fecha actual, que no parece ser lo que busca. También incluiría un componente de tiempo ya que no está utilizando trunc().


Solo como una pequeña demostración de lo que trunc(,'mm') hace:

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

Datos del último mes-

select count(distinct switch_id)
  from [email protected]
 where dealer_name =  'XXXX'
   and to_char(CREATION_DATE,'MMYYYY') = to_char(add_months(trunc(sysdate),-1),'MMYYYY');

Puedes patrocinar nuestro trabajo añadiendo un comentario o puntuándolo te estamos agradecidos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *