Question:
Date: 07-04-2018 15:32:04
(In Spanish)
Les quería compartir esto ya que me di cuenta que en muchos foros hay preguntas similares pero no están contestadas o no funcionan como esperaba.
Para invocarla podrían ejecutar algo como:
Saludos.
PD: En el trabajo utilizo MSSQLServer 2008 r2 pero no debería ser muy dificil traducirla para otros SGBD, no obstante, si necesitan ayuda para traducirla a MySQL u Oracle les puedo dar una mano. Votes: 3 - Answers: 2 - Views: 18 Share on: Google Facebook Twitter LinkedIn Link
Funcion en SQL para obtener la edad[Resolved]
Hola a tod@s, quería compartirles una función que hice para en SQL que sirve para obtener la edad de una persona, teniendo en cuenta los años biciestos.Les quería compartir esto ya que me di cuenta que en muchos foros hay preguntas similares pero no están contestadas o no funcionan como esperaba.
USE [TuBD] GO /****** Object: UserDefinedFunction [dbo].[GetEdad] Script Date: 04/07/2018 08:42:25 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: SANTILLÁN, Esteban Antonio -- Create date: 07-04-2018 -- Description: Retorna la cantidad de años (edad) a partir de una fecha proporcionada, en formato 'YYYY-MM-DD' -- ============================================= ALTER FUNCTION [dbo].[GetEdad] ( @FechaNacimiento DATE ) RETURNS TINYINT AS BEGIN DECLARE @FechaActual DATE = GETDATE(); DECLARE @AnioNacimiento INT = YEAR(@FechaNacimiento), @AnioActual INT = YEAR(@FechaActual), @CantAniosBiciestos TINYINT = 0; DECLARE @AuxAnio INT = @AnioNacimiento; WHILE @AuxAnio <= @AnioActual BEGIN /* * Años Biciestos: * .Cada 4 años * .Pero no cada 100 * .Pero sí cada 400 (Ej: 2000 es divisible por 4 por lo que sí sería año biciesto, pero también es divisible por 100, por lo que no pero también es divisible por 400, por lo que finalmente fue año biciesto) */ IF (@AuxAnio % 4 = 0)-- AND NOT (@AuxAnio % 100 = 0)) OR (@AuxAnio % 100 = 0)--lo dejo comentado porque estas últimas dos condiciones, sólo se evaluarían los años divisibles por 100 y, como sé que el 2000 fue año biciesto, no tiene caso desperdiciar recursos...a no ser que necesiten obtener la cantidad de años transcurridos de,por ejemplo, un hecho histórico BEGIN SET @CantAniosBiciestos = @CantAniosBiciestos + 1; END SET @AuxAnio = @AuxAnio + 1; END RETURN (SELECT DATEDIFF(DAY,DATEADD(DAY,@CantAniosBiciestos,@FechaNacimiento),@FechaActual) / 365); END
Para invocarla podrían ejecutar algo como:
SELECT dbo.GetEdad('1900-01-01');
Saludos.
PD: En el trabajo utilizo MSSQLServer 2008 r2 pero no debería ser muy dificil traducirla para otros SGBD, no obstante, si necesitan ayuda para traducirla a MySQL u Oracle les puedo dar una mano. Votes: 3 - Answers: 2 - Views: 18 Share on: Google Facebook Twitter LinkedIn Link
Answers:
-
-
Date: 08-04-2018 09:15:20 Esteban muchas gracias por compartir ;)
Utiliza el bbcode los tags de Code PHP para envolver el codigo para que quede mejor en su vista
+1
Ya ha sido modificado ;)
Saludos Votes: 0 - Link answer
To actively participate in the community first must authenticate, enter the system.Sign In