miércoles, diciembre 05, 2012

SQL: buscar por rangos de fecha con campos mes y año separados.

Tengo una tabla con campo año y mes por separado. Se requiere seleccionar un rango de fechas.
Por ejemplo de Septiembre de 2011 a Mayo de 2012.
BD: SQL Server 2000

 Opcion 1: (SIN FUNCIONAR) 
Esta consulta no nos devuelve nada debido a que mes es un campo numérico.

select anio, mes from ventas
where (anio>=2011 and mes>=9) and (anio<=2012 and mes<=5)


Opcion 2: (no me gustó) 
Esta opción nos trae todos los registros de 2011 y 2012, después con código php se pueden usar strtotime y después filtrar los registros que necesitamos.

select anio, mes from ventas
where (anio>=2011) and (anio<=2012)

Opcion 3: (sin funcionar)
Intentando concatenar los campos

select anio, mes,(anio+'-'+mes+'-01')

Opcion 4: (sin funcionar)
Concatenando los campos utilizando cast, casi solucionado pero le agrega un espacio en el mes.

select anio, mes, convert (varchar(10),cast(anio as char(4))+'-'+cast(mes as char(2))+'-01',120) 
from ventas

Opcion 5: (SOLUCIONADO)
Concatenando los campos utilizando las funciones cast, right y convert


select anio, mes,  
convert (varchar(10),cast(anio as char(4))+'-'+right('0'+ rtrim(mes), 2)+'-01',120)
from ventas
WHERE
     convert (varchar(10),cast(anio as char(4))+'-'+right('0'+ rtrim(mes), 2)+'-01',120) >='2011-09-01'
and  convert (varchar(10),cast(anio as char(4))+'-'+right('0'+ rtrim(mes), 2)+'-01',120) <='2012-05-01'



Happy Coding!

.