Ver Mensaje Individual
  #6 (permalink)  
Antiguo 05/09/2011, 15:18
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 de nuevo SirSocket.

Para rellenar con ceros puedes hacerlo de muchas formas, lamentablemente SQL Server no cuenta con una función LPAD, pero una forma sería hací:

Código SQL:
Ver original
  1. DECLARE @mes SMALLINT
  2. SET @mes = 1
  3. SELECT RIGHT('0' + CAST(@mes AS VARCHAR(2)), 2) mes
  4. SET @mes = 10
  5. SELECT RIGHT('0' + CAST(@mes AS VARCHAR(2)), 2) mes

Por otro lado, pasaste por alto las observaciones que te hice en el primer post. en el WHERE no puedes comparar dos cadenas utilizando >= y <=. Al poner esto

Código:
Convert(Varchar,ano) + Convert(Varchar,mes) + Convert(Varchar,dia)
estas sumando (concatenando) cadenas, por lo tanto NUNCA VAS A PODER COMPARAR RANGOS DE FECHAS

el resultado de tu concatenación tendrías que convertirlo a tipo datetime, para poder hacer las comparaciones. Checa este script

Código SQL:
Ver original
  1. DECLARE @movimientos TABLE (anio SMALLINT, mes SMALLINT, dia SMALLINT)
  2. INSERT INTO @movimientos VALUES (2009, 12, 31)
  3. INSERT INTO @movimientos VALUES (2010, 6, 28)
  4. INSERT INTO @movimientos VALUES (2011, 1, 1)
  5. SELECT
  6. CAST(CAST(anio AS VARCHAR(4)) +
  7. RIGHT('0' + CAST(mes AS VARCHAR(2)), 2) +
  8. RIGHT('0' + CAST(dia AS VARCHAR(2)), 2) AS datetime) fecha
  9. FROM @movimientos
  10. WHERE
  11. CAST(CAST(anio AS VARCHAR(4)) +
  12. RIGHT('0' + CAST(mes AS VARCHAR(2)), 2) +
  13. RIGHT('0' + CAST(dia AS VARCHAR(2)), 2) AS datetime) >= '20100101' AND
  14. CAST(CAST(anio AS VARCHAR(4)) +
  15. RIGHT('0' + CAST(mes AS VARCHAR(2)), 2) +
  16. RIGHT('0' + CAST(dia AS VARCHAR(2)), 2) AS datetime) <= '20101231'

El resultado sería sólo el segundo registro (si observas un poco es la fecha de dices te trae problemas, con el mes junio (6)) el primer registro y tercero no se muestras pues no forman parte del rango de fechas.

Saludos
Leo.