jafm Posted March 13, 2014 Report Share Posted March 13, 2014 Boas, Tenho um ciclo while com um contador, que atualmente ele conta os dias do mês WHILE @Contador <= @NumeroDias mas agora queria colocar uma restrição, que é caso o mesmo ainda vá a meio como é o caso de Março, queria que ele contasse apenas 13 dias? Como é que faria o IF? Link to comment Share on other sites More sharing options...
Rechousa Posted March 13, 2014 Report Share Posted March 13, 2014 Olá, Não sei se percebi muito bem. Tens um ciclo While para contar o nr. de dias do mês atual? O SQL Server tem funções que te retornam essa informação. Vê se isto ajuda: DECLARE @DataAtual DATETIME = GETDATE(); DECLARE @DiasDoMes INT = DATEDIFF(DAY, @DataAtual, DATEADD(MONTH, 1, @DataAtual)) DECLARE @DiaHoje INT = DATEPART(dd, @DataAtual); PRINT @DataAtual; -- Resultado: Hoje são 2014-03-13 PRINT @DiasDoMes; -- Resultado: 31 dias, Março tem 31 dias PRINT @DiaHoje; -- Resultado: 13, Hoje é dia 13 Pedro Martins Sharing is Knowledge! http://www.linkedin.com/in/rechousa Link to comment Share on other sites More sharing options...
jafm Posted March 13, 2014 Author Report Share Posted March 13, 2014 Sim eu sei, eu para contar os dias do mes atual estou a utilizar esta DECLARE @NumeroDias int = DATEPART(DAY, DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@DataInicial)+1,0))); mas o que eu quero é que ele me o numero de dia de até hoje, até um máximo do mês actual? Porque eu estou a utilizar para comparar informação atraves de mês atual com o mês atual do ano anterior, e ao utilizar o procedimento atual, ele retira-me a informação para o mes atual todo, no entanto se ainda vamos no dia 13 queria que ele só me devolvesse a informação até esse dia quer do mês atual quer do mês do ano anterior. Link to comment Share on other sites More sharing options...
AlexSa Posted March 15, 2014 Report Share Posted March 15, 2014 Olá. Se percebi bem, queres por exemplo fazer uma comparação de vendas deste mês com o homólogo do ano anterior, mas só até ao dia atual. Eu faria algo do género: -- Preparação das varias datas declare @data_atual datetime, @data_inicio_mes datetime, @data_atual_ano_anterior datetime, @data_inicio_mes_ano_anterior datetime select @data_atual=convert(datetime, rtrim(year(getdate()))+right(rtrim(100+month(getdate())),2)+right(rtrim(100+day(getdate())),2)) select @data_inicio_mes = DATEADD(dd, 1-DAY(@data_atual), @data_atual) select @data_atual_ano_anterior = DATEADD(yyyy, -1, @data_atual) select @data_inicio_mes_ano_anterior = DATEADD(yyyy, -1, @data_inicio_mes) -- Consulta de vendas select SUM(valor) as valor_mes_atual from vendas where emissao between @data_inicio_mes and @data_atual select SUM(valor) as valor_mes_ano_anterior from vendas where emissao between @data_atual_ano_anterior and @data_inicio_mes_ano_anterior Não era necessário criar tantas variáveis, mas creio que ajuda a entender. Link to comment Share on other sites More sharing options...
jafm Posted March 18, 2014 Author Report Share Posted March 18, 2014 Eu necessito é de um contador que me conte o número de dias da data atual até um máximo do mês Link to comment Share on other sites More sharing options...
Rechousa Posted March 18, 2014 Report Share Posted March 18, 2014 Queres fazer com contadores? Então faz, mas não precisas, só tens de usar as funções que o SQL Server te disponibiliza: DECLARE @DataAtual DATETIME = GETDATE(); DECLARE @Data DATETIME = '2014-04-01'; -- O dia não interessa, é apenas considerado o ano e o mês DECLARE @MaximoMes DATETIME = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@Data)+1,0)) PRINT @DataAtual; -- Resultado: Hoje são 2014-03-18 PRINT @MaximoMes; -- Resultado: 30 de Abril de 2014 PRINT DATEDIFF(dd, @DataAtual, @MaximoMes); -- Faltam 43 dias para o dia 30 de Abril de 2014 Pedro Martins Sharing is Knowledge! http://www.linkedin.com/in/rechousa Link to comment Share on other sites More sharing options...
jafm Posted March 18, 2014 Author Report Share Posted March 18, 2014 Peço desculpa, mas expôs mal a minha ideia, ou seja, é eu não quero os dias que faltam, mas sim os que já passaram desde o inicio do mês até ao máximo do mês... Link to comment Share on other sites More sharing options...
jafm Posted March 18, 2014 Author Report Share Posted March 18, 2014 Bem penso que já devo ter descoberto parte da minha solução. DECLARE @DataAtual DATETIME = GETDATE(); DECLARE @DATA DATETIME = '2014-03-01'; -- O dia não interessa, é apenas considerado o ano e o mês DECLARE @DataDiaAnterior DATETIME = DATEADD(d,-1,@Data); --select DATEADD(d,-1,@Data); DECLARE @MaximoMes DATETIME = DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,@DATA)+1,0)) PRINT DATEDIFF(dd, @DataDiaAnterior,@DataAtual); PRINT DATEDIFF(dd, @DataDiaAnterior, @MaximoMes) ; Agora como faço pra restringir até ao máximo do mês? Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now