Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

valores diferentes between vs operadores de comparacion

Estas en el tema de valores diferentes between vs operadores de comparacion en el foro de Oracle en Foros del Web. Estoy analisando consultas que ya estas hechas, no soy experto, y tengo esa duda, mi actual jefe establece los filtros con el siguiente rango de ...
  #1 (permalink)  
Antiguo 06/11/2012, 11:01
 
Fecha de Ingreso: noviembre-2012
Mensajes: 1
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta valores diferentes between vs operadores de comparacion

Estoy analisando consultas que ya estas hechas, no soy experto, y tengo esa duda, mi actual jefe establece los filtros con el siguiente rango de fechas:

and to_date(to_char(mmt.TRANSACTION_DATE, 'dd-mon-yyyy')) >= :p_fecha_ini
and to_date(to_char(mmt.TRANSACTION_DATE, 'dd-mon-yyyy')) <= :p_fecha_fin

en donde el resultado es 2691 registros con parametros son de 01/08/12 a 31/08/12

pero, si uso between:

and mmt.transaction_date between ‘01/08/12’ and ‘31/08/12’

arroja como resultado 2403

Mi pregunta es por que se da esa diferencia y a cual irle y como quedaria la sintaxis si quisiera usar between en :
and to_date(to_char(mmt.TRANSACTION_DATE, 'dd-mon-yyyy')) >= :p_fecha_ini
and to_date(to_char(mmt.TRANSACTION_DATE, 'dd-mon-yyyy')) <= :p_fecha_fin

  #2 (permalink)  
Antiguo 06/11/2012, 13:05
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: valores diferentes between vs operadores de comparacion

Hola Kimera1302

Hay que tener en cuenta varios aspectos:
1. En teoria las consultas deberían arrojar el mismo numero de registros. Puede haber unos registros (por horas especificas) que no contemple la segunda consulta.
2. La forma como lo hace tu jefe esta bien funcionalmente, pero esta realizando conversiones innecesarias. Ademas, puede estar afectando el uso de indices.

Si mmt.TRANSACTION_DATE es de tipo date, es irrelevante llevarlo a char y luego volverlo a llevar a date. La comparacion debería ser directa.
and mmt.TRANSACTION_DATE >= to_date(:p_fecha_ini,'YYYY-MM-DD')
and mmt.TRANSACTION_DATE <= to_date(:p_fecha_fin,'YYYY-MM-DD')


En la clausula between sería como tu dices, pero haciendo uso de la función to_date, para evitar problemas en la codificacion de tu base de datos.
Imaginate esta fecha: 03/04/2012. Si el nls_date de tu mase de datos es mm/dd/aaaa o i es dd/mm/yyyy tendrá resultados diferentes.

Mi consejo es que quede con between. Es una consulta mucho mas limpia y sin conversiones innecesarias.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: pl-sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:32.