Buenos días David...
En tu post no das mucha información acerca de qué problema tienes con la consulta (error de sintaxis, el resultado que te arroja no es el correcto, etc), no mencionas qué manejador de BD estás utilizando, el nombre de tu tabla, etc... así es dificil poder ayudarte, pero vamos a hacer el intento...
Dado que estás utilizando la función datename puedo suponer que se trata de SQL Server. Te comento lo siguiente: La función DATENAME te regresa una CADENA por lo que la función BETWEEN compara también entre cadenas, te pongo un ejemplo a ver si queda más claro.
Supongamos que tienes una tabla USUARIOS con un campo NOMBRE de tipo varchar.
select * from USUARIOS where substring(nombre,1,1) between 'F' and 'M'
Lo que hace esta consulta es regresarte todos aquellos usuarios cuya primer letra esté entre las letras F y M, de acuerdo al abecedario.
Ahora bien, creo que lo que tú estás intentando hacer es obtener los registros comprendidos entre dos meses. Supongamos que quieres obtener los registros comprendidos entre abril y agosto:
Abril -> mes 4
Agosto -> mes 8
Lo que deberías hacer es algo como esto:
Select * from Tu_Tabla
where
datepart(month, fecha) between 4 and 8
Esta connsulta no toma en cuenta el año ni el día, sólo el mes. Si esto no es lo que quieres, te pido que seas un poco más claro al momento de dejar un post y con gusto tratarémos de ayudarte.
Saludos y espero tus comentarios.
Leo.