Consulta SQL Relación de Clientes que tengan entre 20 y 30 años

La consulta es la siguiente: Relación de Clientes que tengan entre 20 y 30 años

El código que he hecho es este:

select rtrim(paterno)+ ' '+rtrim(materno)+', '+ rtrim(nombres) as [Apellidos y Nombres]
from dbo.Tbl_Clientes
WHERE YEAR(SYSDATETIME()) - YEAR(fecnac)BETWEEN 20 AND 30
order by [Apellidos y Nombres]

Pero por ejemplo si hay algunos cuya fecha de nacimiento es el 12-12-1992 aun no tienen 20 años pero según esa consulta si se listan. ¿Cómo podría corregir eso?

1 Respuesta

Respuesta
1

Considero que es mejor que te construyes un sp o una función que te ayude a determinar la diferencia entre ambas fechas, primero determina la diferencia de fechas en días, luego evalúa cuantos años, podrías usar una división entre el nro de días que tiene un año (standard es 365 si es que no me equivoco) y de ser necesario usa la función floor.

Aquí su definición.

http://msdn.microsoft.com/es-es/library/ms178531.aspx

También podrías generar un bucle que valla restando dicha cantidad de días (365) y evalúe continuar si el nro. de días restante es mayor a 365, tu nro. de vueltas es la edad.

No entendí muy bien, recién soy principiante en esto. ¿Podrías explicarme mejor?

Sospecho, por el comando SYSDATETIME, que estas usando SQL 2008, de equivocarme, corrígeme por favor.

No tengo la herramienta par poder probar, te dejo un query pero tienes que probarlo y si no funka me comentas.

select rtrim(paterno)+ ' '+rtrim(materno)+', '+ rtrim(nombres) as [Apellidos y Nombres]
from dbo.Tbl_Clientes
WHERE Floor(datediff(day,fecnac,SYSDATETIME())/365) BETWEEN 20 AND 30
order by [Apellidos y Nombres]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas