Array
(
    [0] => stdClass Object
        (
            [Votos_Balanceados] => 1
            [id] => 561586
            [titulo] => como incluir no código abaixo a query para saber idade de cada participante
            [dataCadastro] => DateTime Object
                (
                    [date] => 2016-08-26 12:19:05
                    [timezone_type] => 3
                    [timezone] => America/Sao_Paulo
                )

            [isFirstPost] => -1
            [idUsuario] => 303894
            [status] => A
            [isExample] => 
            [NomeUsuario] => David Styveen
            [Apelido] => 
            [Foto] => 303894_20140814132448.jpg
            [Conteudo] => 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.

[code]
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
[/code]

Para o seu script, seria interessante adaptar esse trecho:
[code],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 [/code]
Porém, se apenas a validação do ano já for suficiente para ti, somente utilize o datediff. ) )

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

Jurandi Silva
   - 24 ago 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

Post mais votado

David Styveen
|
MVP
Pontos: 545
    26 ago 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.

#Código

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:
#Código
,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.

Ricardo Vieira
|
MVP
Pontos: 100
    24 ago 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

Jurandi Silva
   - 24 ago 2016

ok, muito obrigado