none
Como implementar um select com If RRS feed

  • Pergunta

  • Olá,

    é possível criar uma condição em um select?

    Por exempo, no select abaixo:

    ALTER PROCEDURE [dbo].[spIdadeListaNomeAnimais] 
    	
    AS
    BEGIN
    	  DECLARE @DataAtual DATE          
           SET @DataAtual = GETDATE()
           
           Select nome, @DataAtual AS data_atual, data_Nasc,
                  (CONVERT(VARCHAR,DATEDIFF(YEAR,data_Nasc,@DataAtual)) + ' ano(s)')AS IDADE_ano, 
    	          (CONVERT(VARCHAR,DATEDIFF(MONTH,data_Nasc,@DataAtual)) + ' mes(es)')AS IDADE_mes,
    	          (CONVERT(VARCHAR,DATEDIFF(SECOND,data_Nasc,@DataAtual) / 86400/7) + ' semana(s)')AS IDADE_semana
        From Animal_Companhia 
    	Order by data_Nasc
    END

    Eu preciso que retorne com a possíveis descrições abaixo conforme a idade em dias meses ou anos:

    Período neonatal = 0 aos 14 dias                            

    Período de transição = 15 a 21 dias                 

    Período de reconhecimento = 21 a 28 dias                  

    Período de socialização = 21 a 49 dias

    Período de socialização com humanos = 7 a 12 semanas

    Período do medo I = 8 a 11 semanas

    Período de rebeldia = 13 a 16 semanas

    Período de surdez seletiva = 4 a 8 meses

    Período do medo II = 6 a 14 meses

    Período de maturidade = 1 a 4 anos

    quarta-feira, 21 de setembro de 2016 12:33

Respostas

  • Seria mais ou menos isso:

           Select nome, @DataAtual AS data_atual, data_Nasc,
                  (CONVERT(VARCHAR,DATEDIFF(YEAR,data_Nasc,@DataAtual)) + ' ano(s)')AS IDADE_ano, 
    	          (CONVERT(VARCHAR,DATEDIFF(MONTH,data_Nasc,@DataAtual)) + ' mes(es)')AS IDADE_mes,
    	          (CONVERT(VARCHAR,DATEDIFF(SECOND,data_Nasc,@DataAtual) / 86400/7) + ' semana(s)')AS IDADE_semana,
    			  CASE	WHEN DATEDIFF(DAY,data_Nasc,@DataAtual)) >= 0 AND DATEDIFF(DAY,data_Nasc,@DataAtual)) <= 14 THEN 'Período neonatal'
    					WHEN DATEDIFF(DAY,data_Nasc,@DataAtual)) >= 15 AND DATEDIFF(DAY,data_Nasc,@DataAtual)) <= 21 THEN 'Período de transição'
    					.
    					.
    					.
    			  END
        From Animal_Companhia 
    	Order by data_Nasc


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Marcado como Resposta Wilson Boris quarta-feira, 21 de setembro de 2016 13:04
    quarta-feira, 21 de setembro de 2016 12:42
  • Olá Wilson,

    Tem sim..dá uma olhada nesse artigo ele mostra quase todas as possibilidades de uso de condições em T-SQL: http://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Wilson Boris quarta-feira, 21 de setembro de 2016 13:04
    quarta-feira, 21 de setembro de 2016 12:41

Todas as Respostas

  • Olá Wilson,

    Tem sim..dá uma olhada nesse artigo ele mostra quase todas as possibilidades de uso de condições em T-SQL: http://www.devmedia.com.br/trabalhando-com-expressoes-case-e-a-funcao-iif-no-t-sql/31292

    Valeu!


    Se a resposta for relevante ou tenha resolvido seu problema, marque como útil/resposta!

    André Secco
    Microsoft MSP & MSDN Tech Advisor
    Blog: http://andresecco.com.br
    GitHub: http://github.com/andreluizsecco
    Twitter: @andre_secco

    • Marcado como Resposta Wilson Boris quarta-feira, 21 de setembro de 2016 13:04
    quarta-feira, 21 de setembro de 2016 12:41
  • Seria mais ou menos isso:

           Select nome, @DataAtual AS data_atual, data_Nasc,
                  (CONVERT(VARCHAR,DATEDIFF(YEAR,data_Nasc,@DataAtual)) + ' ano(s)')AS IDADE_ano, 
    	          (CONVERT(VARCHAR,DATEDIFF(MONTH,data_Nasc,@DataAtual)) + ' mes(es)')AS IDADE_mes,
    	          (CONVERT(VARCHAR,DATEDIFF(SECOND,data_Nasc,@DataAtual) / 86400/7) + ' semana(s)')AS IDADE_semana,
    			  CASE	WHEN DATEDIFF(DAY,data_Nasc,@DataAtual)) >= 0 AND DATEDIFF(DAY,data_Nasc,@DataAtual)) <= 14 THEN 'Período neonatal'
    					WHEN DATEDIFF(DAY,data_Nasc,@DataAtual)) >= 15 AND DATEDIFF(DAY,data_Nasc,@DataAtual)) <= 21 THEN 'Período de transição'
    					.
    					.
    					.
    			  END
        From Animal_Companhia 
    	Order by data_Nasc


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    • Marcado como Resposta Wilson Boris quarta-feira, 21 de setembro de 2016 13:04
    quarta-feira, 21 de setembro de 2016 12:42