locked
Buscar nome do mês no SQL 2008 RRS feed

  • Pergunta

  • Boa tarde!

    Estou utilizando o SQL 2008 e preciso de uma sentença que retorne o mês vigente por extenso. Alguém pode me ajudar? Consegui, parcialmente, via Business Inteligence Development Studio.


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    sexta-feira, 14 de dezembro de 2012 17:20

Respostas

  • Eduardo,

    O campo da sua consulta SQL que retorna o mês ou data, a coluna da qual você deseja extrair o mês, está retornando o valor literal em inglês? Se sim substitua cada linha do switch por:

    Fields!NomeDoSeuCampo.Value = <ValorEsperado (Ex.: "December")>, "Dezembro"

    Espero ter ajudado.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Eduardo_Amaral quinta-feira, 2 de maio de 2013 20:04
    quinta-feira, 3 de janeiro de 2013 19:03

Todas as Respostas

  • Eduardo,

    Voce consegue assim:

    SELECT DATENAME(MONTH, GETDATE())


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    sexta-feira, 14 de dezembro de 2012 17:34
    Moderador
  • Obrigado, Fabrício. 

    A sentença retornou "December". Como faço para convertê-la para o Português "Dezembro"?

    Valeu!

    Eduardo


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    sexta-feira, 14 de dezembro de 2012 17:44
  • Eduardo,

    Tenta assim:

    SET LANGUAGE Português
    GO
    SELECT DATENAME(MONTH, GETDATE())


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Sugerido como Resposta Marcos Rocha sexta-feira, 14 de dezembro de 2012 18:52
    sexta-feira, 14 de dezembro de 2012 18:15
  • Eduardo,

    O SET LANGUAGE server para retornar a data no idioma desejado, para verificar o idioma padrão de sua sessão execute “DBCC UserOptions”

     

    Para visualizar qual é o nome dos idiomas existentes no SQL verifique na coluna name da tabela sysLanguages.

    select * from master.dbo.syslanguages


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sexta-feira, 14 de dezembro de 2012 18:18
  • Fabrizzio, estou quase lá. Usei o Case. Veja.

    SELECT 
    CASE WHEN DATENAME(MONTH, GETDATE()) = 'December' THEN 'Dezembro' END

    Resultado = 'Dezembro'     -- ok, porém preciso de outros meses.

    TENTEI O SEGUINTE:

    SELECT 
    CASE WHEN DATENAME(MONTH, GETDATE()) = 'December' THEN 'Dezembro' ELSE
      CASE WHEN DATENAME(MONTH, GETDATE()) = 'November' THEN 'Novembro' ELSE 
        CASE WHEN DATENAME(MONTH, GETDATE()) = 'October' THEN 'Novembro' ELSE
          CASE WHEN DATENAME(MONTH, GETDATE()) = 'September' THEN 'Outubro' ELSE
            CASE WHEN DATENAME(MONTH, GETDATE()) = 'August' THEN 'Setembro' ELSE
              CASE WHEN DATENAME(MONTH, GETDATE()) = 'July' THEN 'Julho' ELSE
                CASE WHEN DATENAME(MONTH, GETDATE()) = 'June' THEN 'Junho' ELSE
                  CASE WHEN DATENAME(MONTH, GETDATE()) = 'May' THEN 'Maio' ELSE
                   CASE WHEN DATENAME(MONTH, GETDATE()) = 'April' THEN 'Abril' ELSE
                     CASE WHEN DATENAME(MONTH, GETDATE()) = 'March' THEN 'Março' ELSE
                      CASE WHEN DATENAME(MONTH, GETDATE()) = 'February' THEN 'Fevereiro' ELSE
                       CASE WHEN DATENAME(MONTH, GETDATE()) = 'January' THEN 'Janeiro' 
                       END 
                      END 
                     END 
                   END 
                  END 
                END 
               END 
              END 
            END 
        END 
    END

    ---  RETORNOU O ERRO

    Mensagem 125, Nível 15, Estado 4, Linha 14
    Case expressions may only be nested to level 10.

    O QUE FAÇO PARA CORRIGIR ESSE CASE??



    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    sexta-feira, 14 de dezembro de 2012 18:42
  • Marcos, pensei nisso. Mas fiquei com receio de interferir em outras programações existentes vinculadas a base. 

    Existe essa possibilidade?


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    sexta-feira, 14 de dezembro de 2012 19:00
  • Eduardo,

    O SET LANGUAGE vai funcionar apenas para essa transação não afetará seu ambiente, ao fim da transação ela perderá o efeito.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sábado, 15 de dezembro de 2012 16:46
  • Eduardo,

    O SET LANGUAGE vai funcionar apenas para essa transação não afetará seu ambiente, ao fim da transação ela perderá o efeito.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sábado, 15 de dezembro de 2012 16:46
  • Eduardo,

    O SET LANGUAGE vai funcionar apenas para essa transação não afetará seu ambiente, ao fim da transação ela perderá o efeito.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sábado, 15 de dezembro de 2012 16:46
  • Olá Eduardo,

    A opção que o Marcos Rocha passou terá um melhor desempenho, mas se ainda assim você necessitar utilizar a consulta que você criou apenas retire os ELSE's que você colocou. Como essa abaixo.

    ELECT 
    CASE WHEN DATENAME(MONTH, GETDATE()) = 'December' THEN 'Dezembro'
      CASE WHEN DATENAME(MONTH, GETDATE()) = 'November' THEN 'Novembro'
        CASE WHEN DATENAME(MONTH, GETDATE()) = 'October' THEN 'Outubro' 
          CASE WHEN DATENAME(MONTH, GETDATE()) = 'September' THEN 'Setembro'
            CASE WHEN DATENAME(MONTH, GETDATE()) = 'August' THEN 'Agosto' 
              CASE WHEN DATENAME(MONTH, GETDATE()) = 'July' THEN 'Julho' 
                CASE WHEN DATENAME(MONTH, GETDATE()) = 'June' THEN 'Junho'
                  CASE WHEN DATENAME(MONTH, GETDATE()) = 'May' THEN 'Maio' 
                   CASE WHEN DATENAME(MONTH, GETDATE()) = 'April' THEN 'Abril'

                     CASE WHEN DATENAME(MONTH, GETDATE()) = 'March' THEN 'Março' 
                      CASE WHEN DATENAME(MONTH, GETDATE()) = 'February' THEN 'Fevereiro' 
                       CASE WHEN DATENAME(MONTH, GETDATE()) = 'January' THEN 'Janeiro' 

    END

    Se a resposta foi util, classifique-a


    Att, Marcos Freccia [MCTS|MCITP|MCT SQL Server 2008]

    quinta-feira, 20 de dezembro de 2012 00:36
  • Bom dia!

    Marcos, tentei a opção sugerida por você (SET LANGUAGE), funcionou perfeitamente na execução via "Management Studio" porém via BIDs (Designer de consulta) não funcionou. Apresentou erro de sintaxe.

    SET   LANGUAGE Português GO
              SELECT DISTINCT 
              PPESSOA.NOME AS [ALUNO(A)], SALUNO.RA, SHABILITACAO.NOME + ' do(a) ' + SCURSO.NOME AS ANO_SERIE_CURSO, PPAI.NOME AS PAI, 
              PMAE.NOME AS MAE, SPLETIVO.CODPERLET, STURNO.NOME, PPESSOA.DTNASCIMENTO AS [DT NASC], DATEPART(day, SYSDATETIME()) AS day, 
              DATEPART(year, SYSDATETIME()) AS ano, GFILIAL.NOME AS FILIAL, GFILIAL.CIDADE, DATENAME(MONTH, GETDATE())

    Marcos Freccia,

    tentei tirar os Else's conforme indicado, porém dá erro de sintaxe. São necessários os Elses. Tem outra opção?

    Agradeço vocês. Feliz ano novo!!!

    Abraço!

    Eduardo Amaral


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quarta-feira, 2 de janeiro de 2013 13:17
  • Ola Eduardo,

    Me desculpe, realmente a sintaxe está errada. Segue a instrução correta.

    SELECT Mes = 
    CASE WHEN DATENAME(MONTH, GETDATE()) = 'December' THEN 'Dezembro'
      WHEN DATENAME(MONTH, GETDATE()) = 'November' THEN 'Novembro'
       WHEN DATENAME(MONTH, GETDATE()) = 'October' THEN 'Outubro' 
       WHEN DATENAME(MONTH, GETDATE()) = 'September' THEN 'Setembro'
       WHEN DATENAME(MONTH, GETDATE()) = 'August' THEN 'Agosto' 
       WHEN DATENAME(MONTH, GETDATE()) = 'July' THEN 'Julho' 
       WHEN DATENAME(MONTH, GETDATE()) = 'June' THEN 'Junho'
       WHEN DATENAME(MONTH, GETDATE()) = 'May' THEN 'Maio' 
       WHEN DATENAME(MONTH, GETDATE()) = 'April' THEN 'Abril'

       WHEN DATENAME(MONTH, GETDATE()) = 'March' THEN 'Março' 
       WHEN DATENAME(MONTH, GETDATE()) = 'February' THEN 'Fevereiro' 
       WHEN DATENAME(MONTH, GETDATE()) = 'January' THEN 'Janeiro' 

    END

    Quanto ao bids não funcionar, você poderia passar qual a mensagem de erro gerada?

    Se a resposta foi útil, classifique


    Att,
    Marcos Freccia [MTA|MCTS|MCITP|MCT SQL Server 2008]
    Blog|Twitter
    Assine também os feeds clicando aqui

    quarta-feira, 2 de janeiro de 2013 15:56
  • Marcos,

    Adicionei parte da sentença que você informou, com a declaração da variável "mes" e sem a declaração, agora traz NULL onde deveria trazer o nome do mês. Isso no Management Studio. Segue sentença. O que pode estar acontecendo agora meu caro? Obrigado mais uma vez

    DECLARE @MES VARCHAR;
    SELECT DISTINCT          PPESSOA.NOME AS [ALUNO(A)], SALUNO.RA, SHABILITACAO.NOME + ' do(a) ' + SCURSO.NOME AS ANO_SERIE_CURSO, PPAI.NOME AS PAI, PMAE.NOME AS MAE, 
                             SPLETIVO.CODPERLET, STURNO.NOME, PPESSOA.DTNASCIMENTO AS [DT NASC], DATEPART(day, SYSDATETIME()) AS day, DATEPART(year, SYSDATETIME()) 
                             AS ano, GFILIAL.NOME AS FILIAL, GFILIAL.CIDADE,
     MES =                        
    CASE WHEN DATENAME(MONTH, GETDATE()) = 'December' THEN 'Dezembro'
      WHEN DATENAME(MONTH, GETDATE()) = 'November' THEN 'Novembro'
       WHEN DATENAME(MONTH, GETDATE()) = 'October' THEN 'Outubro' 
       WHEN DATENAME(MONTH, GETDATE()) = 'September' THEN 'Setembro'
       WHEN DATENAME(MONTH, GETDATE()) = 'August' THEN 'Agosto' 
       WHEN DATENAME(MONTH, GETDATE()) = 'July' THEN 'Julho' 
       WHEN DATENAME(MONTH, GETDATE()) = 'June' THEN 'Junho'
       WHEN DATENAME(MONTH, GETDATE()) = 'May' THEN 'Maio' 
       WHEN DATENAME(MONTH, GETDATE()) = 'April' THEN 'Abril'
       WHEN DATENAME(MONTH, GETDATE()) = 'March' THEN 'Março' 
       WHEN DATENAME(MONTH, GETDATE()) = 'February' THEN 'Fevereiro' 
       WHEN DATENAME(MONTH, GETDATE()) = 'January' THEN 'Janeiro' 

    END

    Erro ao inserir Set Language no BIDS.


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quarta-feira, 2 de janeiro de 2013 18:58
  • Edurdo,

    No caso do BIDS você pode utilizar uma máscara no campo, você irá pegar o campo que recebe esse valor "December" por exemplo e nas propriedades do campo você define uma função para retornar o valor "Mascarado"

    Tenta fazer assim:

    Use a função Switch

    =Switch
    (
    Fields!MES.Value = 1, "Janeiro",
    Fields!MES.Value = 2, "Fevereiro",
    Fields!MES.Value = 3, "Março",
    Fields!MES.Value = 4, "Abril",
    Fields!MES.Value = 5, "Maio",
    Fields!MES.Value = 6, "Junho",
    Fields!MES.Value = 7, "Julho",
    Fields!MES.Value = 8, "Agosto",
    Fields!MES.Value = 9, "Setembro",
    Fields!MES.Value = 10, "Outubro",
    Fields!MES.Value = 11, "Novembro",
    Fields!MES.Value = 12, "Dezembro"
    )

    Nesse caso o meu retorno é o número referente ao mês, mas você pode adaptar para a string do nome do mês em inglês.

    A fução Switch troca o valor retornado (1º parâmetro) pelo valor passado (2º parâmetro)

    Espero que o ajude


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quarta-feira, 2 de janeiro de 2013 19:15
  • Eduardo,

    Um detalhe a palavra Português não é reconhecida, você tem que substituir por Portuguese e outra coisa, o comando Go é reconhecido somente no Management Studio pois não é um comando da Linguagem T-SQL, mas sim uma instrução de processamento por parte do Management Studio.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    quinta-feira, 3 de janeiro de 2013 15:36
    Moderador
  • Marcos, obrigado mais uma vez mas ainda não funcionou. Entendi perfeitamente a sua sugestão, mas veja abaixo o erro. Tentei com o mês escrito das duas formas (ingles - portugues).


    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 3 de janeiro de 2013 17:15
  • Eduardo,

    Tenta retornar essemês como número que eu acho que vai dar certo. (só retirar o MONTH() do campo na consulta SQL)


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 3 de janeiro de 2013 17:19
  • Marcos,

    a consulta SQL, conforme enviado acima, não possui a expressão que você citou "MONTH()". Existe apenas no Switch (mesmo assim, sem o parenteses) porém faz referencia ao campo desejado e, posteriormente, o nome do mês que eu desejo que retorne.

    Abs.,

    Eduardo




    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 3 de janeiro de 2013 18:42
  • Eduardo,

    O campo da sua consulta SQL que retorna o mês ou data, a coluna da qual você deseja extrair o mês, está retornando o valor literal em inglês? Se sim substitua cada linha do switch por:

    Fields!NomeDoSeuCampo.Value = <ValorEsperado (Ex.: "December")>, "Dezembro"

    Espero ter ajudado.


    Se esta sugestão for útil, por favor, classifique-a como útil. Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    • Marcado como Resposta Eduardo_Amaral quinta-feira, 2 de maio de 2013 20:04
    quinta-feira, 3 de janeiro de 2013 19:03
  • Obrigado!

    Eduardo Gleison Gonçalves Amaral eduardogleison@gmail.com

    quinta-feira, 2 de maio de 2013 20:04
  • SELECT
                    CASE DATEPART(MONTH, GETDATE())
                    WHEN 1 THEN 'Janeiro'
                    WHEN 2 THEN 'Fevereiro'
                    WHEN 3 THEN 'Março'
                    WHEN 4 THEN 'Abril'
                    WHEN 5 THEN 'Maio'
                    WHEN 6 THEN 'Junho'
                    WHEN 7 THEN 'Julho'
                    WHEN 8 THEN 'Agosto'
                    WHEN 9 THEN 'Setembro'
                    WHEN 10 THEN 'Outubro'
                    WHEN 11 THEN 'Novembro'
                    WHEN 12 THEN 'Dezembro'
                    END AS MES
    segunda-feira, 15 de agosto de 2016 20:20