Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/01/2011, 16:45
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 18 años
Puntos: 447
Respuesta: select para mostrar fecha determinada

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 original
  1. SELECT datediff(d, getdate(), '2011-01-01');
  2. -- 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 original
  1. DECLARE @Medicamentos TABLE (id INT, nombre VARCHAR(10), fechaVencimiento datetime)
  2. INSERT INTO @Medicamentos VALUES (1, 'Uno', '2011-01-10 17:14:21')
  3. INSERT INTO @Medicamentos VALUES (2, 'Dos', '2011-01-11 13:51:01')
  4. INSERT INTO @Medicamentos VALUES (3, 'Tres', '2011-01-12 23:59:59')
  5. INSERT INTO @Medicamentos VALUES (4, 'Cuatro', '2011-01-13 00:00:00')
  6. INSERT INTO @Medicamentos VALUES (5, 'Cinco', '2011-01-14 05:01:34')
  7. INSERT INTO @Medicamentos VALUES (6, 'Seis', '2011-01-15 00:00:01')
  8. INSERT INTO @Medicamentos VALUES (7, 'Siete', '2011-01-16 23:59:59')
  9. INSERT INTO @Medicamentos VALUES (8, 'Ocho', '2011-01-17 00:00:00')
  10. SELECT * FROM @medicamentos
  11. 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 original
  1. SELECT * FROM @medicamentos WHERE datediff(d,getdate(),fechaVencimiento)
  2. BETWEEN 0 AND 3
  3. --O comparando los rangos de fecha >= y <=
  4. SELECT * FROM @Medicamentos
  5. WHERE
  6. CONVERT(datetime, DATEDIFF(d, 0, fechaVencimiento), 102) >=
  7. CONVERT(datetime, DATEDIFF(d, 0, getdate()), 102) AND
  8. CONVERT(datetime, DATEDIFF(d, 0, fechaVencimiento), 102) <=
  9. 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.