none
Melhor forma de usar datas RRS feed

  • Pergunta

  • Seguinte.

    Tenho um form, que apresentará um relatório, que é feita a consulta atraves de uma procedure e apresentado graficamente pelo report

    No meu form, o usuário, irá escolher dentro de um combo, o mes da consulta e em outro combo, o ano.
    Na minha procedure, eu receberei esses parametros (@mes e @ano), no qual, virá nesse formato: @mes = Janeiro...até dezembro e @ano 2001...n

    na minha base de dado, tenho uma data de referencia, que é a que irei comparar com o meu parametro.

    E ainda, preciso decrementar essa data. Por exemplo:

    Se o usuário escolher o combo junho de 2011, aparecerá no meu relatório, o mes inteiro de junho, maio, abril, março, Fevereiro, Janeiro, sempre o mês escolhido, menos 5.

    Como eu posso fazer isso? pois receberei o mes como "janeiro" como comparar janeiro de 2011 com a minha data de referencia que está no meu banco de dados?

    Qual a melhor forma? Converto isso no meu código em c# e passo um dateTime como parâmetro, ou converto isso dentro da minha procedure?

    Como eu converto isso e como eu farei para fazer o Mes - 5 meses?

    Obrigado

    Rodrigo

    sexta-feira, 8 de julho de 2011 13:38

Respostas

  • Rodrigo,

     

         Uma forma de fazer é o citado pelo Luiz (mas creio ser a mais longa), porém você pode fazer com o próprio C#:

        

    DateTime.ParseExact("Janeiro", "MMMM", new CultureInfo("pt-BR")).Month;
    

         A linha acima retorna 1 (Janeiro)

         No SQL Server você deve obter as 3 primeiras letras do nome (com a função LEFT) e usar:

    SELECT DATEPART(mm,CAST('01-JAN-1900' AS DATETIME))
    

         Concatenando o resultado no lugar de JAN, assim:

    DECLARE @MES VARCHAR(3)
    SET @MES = LEFT('JANEIRO', 3)
    SELECT DATEPART(mm,CAST('01-'+@MES+'-1900' AS DATETIME))
    

         Sugiro a primeira, pois dependendo de onde trabalha o SQL pode não entender o JAN por uma questão de configuração de IDIOMA (também depende da versão).

     

    Att,

    Ricardo

     

     

    sexta-feira, 15 de julho de 2011 23:25

Todas as Respostas

  • Rodrigo, não tem muita saída terá que criar uma referencia chave/valor para o mes descrito para o indice numérico do mês. Particularmente prefiro fazer isso no C# e passar para o banco só as informações necessárias, sem ter que ficar programando no banco.

     


    Abraço

    Estevam
    Siga luizestevamb on Twitter

    **** Se a reposta foi útil, então não esqueça de marca-lá. ***
    sexta-feira, 15 de julho de 2011 02:54
  • O problema ai é se o cara escolher março... ai vc tera que pegar o ano anterior...

    tenta passar o mês como int... ai vc usa as funções month() e year() do proprio sql.

    http://msdn.microsoft.com/en-us/library/ms186313.aspx

    http://msdn.microsoft.com/en-us/library/ms187813.aspx

    sexta-feira, 15 de julho de 2011 13:41
  • Rodrigo,

     

         Uma forma de fazer é o citado pelo Luiz (mas creio ser a mais longa), porém você pode fazer com o próprio C#:

        

    DateTime.ParseExact("Janeiro", "MMMM", new CultureInfo("pt-BR")).Month;
    

         A linha acima retorna 1 (Janeiro)

         No SQL Server você deve obter as 3 primeiras letras do nome (com a função LEFT) e usar:

    SELECT DATEPART(mm,CAST('01-JAN-1900' AS DATETIME))
    

         Concatenando o resultado no lugar de JAN, assim:

    DECLARE @MES VARCHAR(3)
    SET @MES = LEFT('JANEIRO', 3)
    SELECT DATEPART(mm,CAST('01-'+@MES+'-1900' AS DATETIME))
    

         Sugiro a primeira, pois dependendo de onde trabalha o SQL pode não entender o JAN por uma questão de configuração de IDIOMA (também depende da versão).

     

    Att,

    Ricardo

     

     

    sexta-feira, 15 de julho de 2011 23:25