SELECT entre dos fechas

publicado por: Anonymous

Estoy intentando hacer un SELECT que me traiga todos los registros que estén entre dos fechas. Sin embargo, quiero ignorar el tiempo (horas, minutos, segundos, etc…). Por ejemplo, tengo un registro que tiene 2016-11-14 11:47:56.207, pero yo envío por parámetro a mi stored procedure solo 14-11-2016. Si lo envío así, no recibo resultado.

WHERE GRP.GRP_Fecha BETWEEN @desde AND @hasta 

solución

En tu caso, te sugiero de evitar cualquier solución que envuelva hacer un convert u otro tipo de conversión con el campo GRP_Fecha. Al hacer eso, no le permites a SQL Server de poder usar un índice si lo hay para el campo GRP_Fecha y esto puede afectar tu rendimiento de forma muy obvia.

Y, por supuesto, between no es ideal en este caso específico por las razones ya mencionadas en tu pregunta.

Te sugiero la siguiente condición para el mejor rendimiento (buen uso de los índices) y para evitar problemas con las horas:

where GRP.GRP_Fecha >= @desde
  and GRP.GRP_Fecha < dateadd(day, 1, @hasta) -- @hasta + 1 día

En el caso donde:

  • @desde = 2016-11-01
  • @hasta = 2016-11-14

… la condición equivale a:

where GRP.GRP_Fecha >= '2016-11-01'
  and GRP.GRP_Fecha < '2016-11-15' -- esta es la parte clave

Al pedir las fechas anteriores a 2016-11-15, esto incluye todas las fechas de 2016-11-14 sin importar la hora.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *