sábado, 17 de noviembre de 2018

Cantidad de mayores y menores de edad en SQL Server

En este post vamos a aprender a obtener la edad de los usuarios que tenemos registrado en nuestra base de datos y también determinar cuántos de ellos son mayores de edad y cuantos son menores de edad , para esto vamos utilizar la función DATEDIFF.

Esta función lo que hace es calcular el intervalo de tiempo entre dos fechas dependiendo del primer argumento que puede ser day, month, year el es un entero  que depende de la diferencia entre los dos argumentos Fecha2-Fecha1.

Para nuestro ejemplo vamos a tener una tabla con el nombre Usuario que tendrá estos datos. 


Id es autoincrementa, Nombre un varchar(150), Sexo char(1) y FechaNac es un datetime.

La query muestra el campo Nombre, Sexo y Edad, edad se obtiene de la diferencia entre el campo FechaNac y la fecha actual.

SELECT Nombre
      ,Sexo
      ,DATEDIFF(YEAR, FechaNac, GETDATE()) AS Edad
FROM Usuario


Ahora tenemos la edad de cada uno de los usuarios, con estos nuevos datos podemos determinar quien es mayor de edad y quien es menor de edad, para esto vamos a utilizar la función CASE que lo que hace es comparar dos o más valores y devolver un resultado, por cada valor hay un WHEN y THEN, si hay una coincidencia ejecuta el THEN por el contrario ejecuta el ELSE pero si no ponemos el ELSE devuelve NULL para finalizar el CASE ponemos END.

En la query vamos a mostrar el Nombre, Sexo y Edad a esto agregamos dos columnas una "Menor" y otra "Mayor" si la edad es mayor a 18 años entonces en la columna que corresponde vamos a poner un 1 de lo contrario un 0, para los menores de edad hacemos lo mismo.

SELECT Nombre
      ,Sexo
      ,DATEDIFF(YEAR, FechaNac, GETDATE())  AS Edad
      ,CASE WHEN DATEDIFF(YEAR, FechaNac, GETDATE()) < 18 
       THEN 1 ELSE 0 END AS Menor
      ,CASE WHEN DATEDIFF(YEAR, FechaNac, GETDATE()) >= 18 
       THEN 1 ELSE 0 END AS Mayor
FROM Usuario 




Y para finalizar vamos a utilizar la función SUM para sumar y obtener como resultado la cantidad de mayores y menores.

SELECT SUM(CASE WHEN DATEDIFF(YEAR, FechaNac, GETDATE()) < 18 
     THEN 1 ELSE 0 END) AS Menor
      ,SUM(CASE WHEN DATEDIFF(YEAR, FechaNac, GETDATE()) >= 18 
     THEN 1 ELSE 0 END) AS Mayor
FROM Usuario 

Resultado final





Link del video


No hay comentarios:

Publicar un comentario