Ver Mensaje Individual
  #2 (permalink)  
Antiguo 05/09/2011, 08:28
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: convertir smallint en fecha + select

Hola SirSocket:

Hay varias cosas que hay que tomar en cuenta. Primero, dices que tienes tus campos año, mes y día en columnas separadas, pero no nos dices de qué tipo de datos son las columnas, varchar, entero y otro tipo.

Segundo, deberías comentarnos cómo estás almacenando los meses y días de un dígito, por ejemplo Enero, lo estás almacenando como '01' o como 1.

Tercero en tu declaración de la variable @DateTime no estás especificando una longitud, por lo tanto solo te va a almacenar un caracter, para almacenar la fecha completa debería ser de al menos 8 caracteres.

Cuarto, para comparar fechas tal y como lo estás poniendo, es decir comparándola contra una cadena con el formato ANSI el primer campo debe ser tipo fecha, es decir comparas datetime contra cadena. si comparas cadena contra cadena estarías comparando ALFABETICAMENTE.

te dejo un script de cómo sería si tus campos son varchar, si nos manejas con un tipo de dato distinto es cuestión de que hagas las adecuaciones necesarias.

Código SQL:
Ver original
  1. DECLARE  @DateTime nvarchar(10)
  2. DECLARE @movimientos TABLE (anio VARCHAR(4), mes VARCHAR(2), dia VARCHAR(2))
  3. INSERT INTO @movimientos VALUES ('1999', '12', '31')
  4. INSERT INTO @movimientos VALUES ('2001', '01', '01')
  5. INSERT INTO @movimientos VALUES ('2003', '01', '01')
  6. INSERT INTO @movimientos VALUES ('2005', '01', '01')
  7. INSERT INTO @movimientos VALUES ('2007', '01', '01')
  8. INSERT INTO @movimientos VALUES ('2009', '01', '01')
  9. INSERT INTO @movimientos VALUES ('2011', '01', '01')
  10. INSERT INTO @movimientos VALUES ('2011', '01', '02')
  11.  
  12. SELECT CONVERT(datetime, anio + mes + dia) fecha
  13. FROM @movimientos
  14. WHERE
  15. CONVERT(datetime, anio + mes + dia) >= '20000101' AND
  16. CONVERT(datetime, anio + mes + dia) <= '20110101'
  17.  
  18. /*
  19. fecha
  20. -----------------------
  21. 2001-01-01 00:00:00.000
  22. 2003-01-01 00:00:00.000
  23. 2005-01-01 00:00:00.000
  24. 2007-01-01 00:00:00.000
  25. 2009-01-01 00:00:00.000
  26. 2011-01-01 00:00:00.000
  27. */

Saludos
Leo.