como incluir no código abaixo a query para saber idade de cada participante

SQL Server

24/08/2016

SELECT a.nr_inscricao,
a.nr_matricula,
a.nr_dep,
a.nr_dv_,
a.dt_inscricao,
b.dt_nascimento,
a.cd_plano
FROM asm_inscricao a, asm_usuario b

WHERE a.nr_matricula = b.nr_matricula
AND a.nr_dep = b.nr_dep
AND a.nr_dv = b.nr_dv
AND a.cd_plano = a.cd_plano
AND b.dt_nascimento = b.dt_nascimento
order by 7,6
Jurandi Silva

Jurandi Silva

Curtidas 0

Melhor post

David Styveen

David Styveen

26/08/2016

Bom dia, Jurandi.

Somente com o DATEDIFF não é 100% confiável o cálculo da idade. O DATEDIFF irá comparar somente os anos, e não vai levar em consideração os meses e os dias.
Segue abaixo o exemplo. Na primeira data estou passando o dia de nascimento como 27, ou seja, ele vai completar 16 anos amanhã. Na segunda data, estou passando com nascimento dia 25, ou seja, ele já tem 16 anos. Executando somente o DATEDIFF ele traz as duas idades como 16. Na terceira coluna é levado em consideração mês e dia, trazendo a idade de 15 anos.

declare @data datetime = '27/08/2000'
declare @data2 datetime = '25/08/2000'
declare @datu datetime = getdate()

;with sql_data as (
select year(@data) ano_pess, month(@data) mes_pess, day(@data) dia_pess
	  ,year(@datu) ano_atu, month(@datu) mes_atu, day(@datu) dia_atu
)
select
	datediff(year,@data,@datu) diff_data -- idade deve ser 15 anos
	, datediff(year,@data2,@datu) diff_data2 -- idade deve ser 16 anos
	,case when ano_pess <= ano_atu and mes_pess <= mes_atu and dia_pess <= dia_atu then datediff(year,@data,@datu)
		 else datediff(year,@data,@datu) - 1 end idade
from sql_data


Para o seu script, seria interessante adaptar esse trecho:
,case when ano_pess <= ano_atu and mes_pess <= mes_atu and dia_pess <= dia_atu then datediff(year,@data,@datu)
		 else datediff(year,@data,@datu) - 1 end idade 

Porém, se apenas a validação do ano já for suficiente para ti, somente utilize o datediff.
GOSTEI 1

Mais Respostas

Ricardo Vieira

Ricardo Vieira

24/08/2016

A sua consulta está errada, você precisa fazer um JOIN entre a tabela asm_inscricao com a tabela asm_usuario. E para obter a idade basta utilizar a função DATEDIFF do sqlserver.


SELECT a.nr_inscricao,
a.nr_matricula,
a.nr_dep,
a.nr_dv_,
a.dt_inscricao,
b.dt_nascimento,
DATEDIFF(YEAR,b.dt_nascimento,GETDATE()) AS Idade
a.cd_plano
FROM asm_inscricao a
INNER JOIN asm_usuario b ON b.nr_matricula = a.nr_matricula
WHERE
a.nr_dep = b.nr_dep
AND a.nr_dv = b.nr_dv
AND a.cd_plano = a.cd_plano
AND b.dt_nascimento = b.dt_nascimento
order by 7,6


Para saber mais sobre JOIN''s aconselho a olhar esse tópico: clausulas-inner-join-left-join-e-right-join-associacao-de-tabelas
GOSTEI 0
Jurandi Silva

Jurandi Silva

24/08/2016

ok, muito obrigado
GOSTEI 0
POSTAR