modo de busqueda de un rango de fecha con like y betwee
Segun lo que tu usas :
DC.fecha >= to_date('01/01/2012','dd/mm/yyyy')
and DC.fecha <= to_date('31/01/2012','dd/mm/yyyy')
en la segunda condicion solo obtendrias los registros menores o iguales a '31/01/2012 00:00:00' es decir tu select no me retornaria los registros registrados el dia '31/01/2012 10:20:00' del dia 31 de enero a las 10 y 20 de la mañana, por eso te recomiendo usar la condicion :
DC.fecha >= trunc(to_date('01/01/2012','dd/mm/yyyy') )
and DC.fecha < trunc( to_date('31/01/2012','dd/mm/yyyy') ) +1
ya que el tipo de dato de fecha en oracle es 'dd/mm/yyyy hh:mi:ss' , es decir fecha y hora.
Para condiciones de fecha no es recomendable usar el between pues es muy costoso y al ejecutarlo la sentencia demora mas.
Segun mi experiencia el like solo lo he usado para ubicar por ejemplo apellidos que contengan caracteres por ejemplo ;
select * from clientes
where apepat like 'A%' ;
Aqui consulto todos los clientes cuyo apellido paterno empieza con la letra 'A'.
Ademas, favor de verificar que al construir tu select no sea muy costoso y usar los indices de las tablas ya que nos ayudan a recuperar la informacion.
Saludos
Luis