Fórum como incluir no código abaixo a query para saber idade de cada participante #560492
24/08/2016
0
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
Curtir tópico
+ 0Post mais votado
26/08/2016
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
Gostei + 1
Mais Posts
24/08/2016
Ricardo Vieira
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: www.devmedia.com.br/clausulas-inner-join-left-join-e-right-join-associacao-de-tabelas-sql-server-2008-parte-2/18930
Gostei + 0
24/08/2016
Jurandi Silva
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)