Usuário com melhor resposta
Melhor forma de usar datas

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...nna 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
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
- Marcado como Resposta Eder CostaModerator quinta-feira, 28 de julho de 2011 17:48
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
**** Se a reposta foi útil, então não esqueça de marca-lá. *** -
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.
-
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
- Marcado como Resposta Eder CostaModerator quinta-feira, 28 de julho de 2011 17:48