Buenas tardes Compañer@s.
Tengo una observación en cuanto a la consulta que da el compañero flaviovich que igual y no es muy relevante, pero que y hay que tomar en cuenta para aquellos que no lo saben o no lo recuerdan: cuando la función datediff recibe como fecha final una fecha menor a la fecha de inicio regresa un número negativo
Código SQL:
Ver originalSELECT datediff(d, getdate(), '2011-01-01');
-- Regresa un -12
Por lo tanto todas las fechas anteriores a la fecha actual también se incluirían en la consulta
Código SQL:
Ver originalDECLARE @Medicamentos TABLE (id INT, nombre VARCHAR(10), fechaVencimiento datetime)
INSERT INTO @Medicamentos VALUES (1, 'Uno', '2011-01-10 17:14:21')
INSERT INTO @Medicamentos VALUES (2, 'Dos', '2011-01-11 13:51:01')
INSERT INTO @Medicamentos VALUES (3, 'Tres', '2011-01-12 23:59:59')
INSERT INTO @Medicamentos VALUES (4, 'Cuatro', '2011-01-13 00:00:00')
INSERT INTO @Medicamentos VALUES (5, 'Cinco', '2011-01-14 05:01:34')
INSERT INTO @Medicamentos VALUES (6, 'Seis', '2011-01-15 00:00:01')
INSERT INTO @Medicamentos VALUES (7, 'Siete', '2011-01-16 23:59:59')
INSERT INTO @Medicamentos VALUES (8, 'Ocho', '2011-01-17 00:00:00')
SELECT * FROM @medicamentos
WHERE datediff(d,getdate(),fechaVencimiento) <= 3
El resultado de esto sería:
Código:
1|Uno|2011-01-10 17:14:21.000
2|Dos|2011-01-11 13:51:01.000
3|Tres|2011-01-12 23:59:59.000
4|Cuatro|2011-01-13 00:00:00.000
5|Cinco|2011-01-14 05:01:34.000
6|Seis|2011-01-15 00:00:01.000
7|Siete|2011-01-16 23:59:59.000
Puedes solucionarlo así:
Código SQL:
Ver originalSELECT * FROM @medicamentos WHERE datediff(d,getdate(),fechaVencimiento)
BETWEEN 0 AND 3
--O comparando los rangos de fecha >= y <=
SELECT * FROM @Medicamentos
WHERE
CONVERT(datetime, DATEDIFF(d, 0, fechaVencimiento), 102) >=
CONVERT(datetime, DATEDIFF(d, 0, getdate()), 102) AND
CONVERT(datetime, DATEDIFF(d, 0, fechaVencimiento), 102) <=
CONVERT(datetime, DATEDIFF(d, 0, getdate() + 3), 102)
El resultado de ambos query's sería
Código:
4|Cuatro|2011-01-13 00:00:00.000
5|Cinco|2011-01-14 05:01:34.000
6|Seis|2011-01-15 00:00:01.000
7|Siete|2011-01-16 23:59:59.000
Como comenté, igual y no es muy relevante, pero en lo particular ya he tenido algunos problemas por olvidar este detalle.
Saludos
Leo.