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

24/08/2016

0

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

Responder

Post mais votado

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.

David Styveen

David Styveen
Responder

Mais Posts

24/08/2016

Ricardo Vieira

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
Responder

24/08/2016

Jurandi Silva

ok, muito obrigado
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar