jueves, 22 de febrero de 2007

SQL - Obtener registros que se encuentren en un rango de fechas (Fecha inicial y Fecha Final)

Es algo comun sobre todo al momento de realizar reportes, el querer obtener registros que se encuentren en un determinado rango de fechas. Existen varias formas de realizarlo, a continuacion un ejemplo sencillo de como podemos llevar acabo esta operacion. En este ejemplo, deseamos obtener todos los registros del 16 de enero al 15 de febrero, incluyendo estos dias.

Si las fechas que deseamos comparar son de tipo DateTime debemos tener en cuenta que las fechas incluyen Dia, Mes, Anyo, Minutos, Segundos y Milisegundos. De esa forma, una fecha '15-02-2007 59:59.998' es valida para nuestra consulta.



-- Declaramos las fechas inicial y final respectivamente
DECLARE @FechaInicial AS DATETIME
DECLARE @FechaFinal AS DATETIME

-- Asignamos las fechas (Pueden ser recibidas en un
--stored procedure)
SET @FechaInicial = '16-01-2007 00:00'
SET @FechaFinal = '15-02-2007 00:00'

--========================================================
-- Si los valores son recibido en un Stored, es necesario
-- verificar que realmente queden en el formato anterior.
SET @FechaInicial = CONVERT(VARCHAR,@FechaInicial, 105) + ' 00:00'
SET @FechaFinal = CONVERT(VARCHAR, @FechaFinal, 105) + ' 00:00'
--========================================================

-- A la fecha final le sumamos un 1 dia, y obtenemos todas
-- las fechas que sean igual o mayor a '16-01-2007 00:00'
-- y sean menores a '16-02-2007 00:00'.
-- Mucho cuidado, ya que si la @FechaFinal tiene siquiera
-- milisegundos, podemos llegar a obtener registros no deseados.

SELECT *
FROM TuTabla AS T
WHERE (T.Fecha >= @FechaInicial AND T.Fecha < DATEADD(DAY, 1, @FechaFinal))