como incluir no código abaixo a query para saber idade de cada participante
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
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
Curtidas 0
Melhor post
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.
Para o seu script, seria interessante adaptar esse trecho:
Porém, se apenas a validação do ano já for suficiente para ti, somente utilize o datediff.
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
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
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
24/08/2016
ok, muito obrigado
GOSTEI 0