Angelo Louzada Postado 5 de Abril de 2010 Tópicos Que Criei: 10 Tópicos/Dia: 0.00 Meu Conteúdo: 21 Conteúdo/Dia: 0.00 Reputação: 0 Pontos/Conquistas: 213 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 39 Dispositivo: Windows Denunciar Compartilhar Postado 5 de Abril de 2010 Moçada, gostaria de pedir uma ajuda de vocês para a seguinte situação: Eu preciso recuperar determinados registros cujo os dados são filtrados pelo campo data de saida para realizar um cálculo de saldo anterior, ou seja, o usuário irá informar uma data inicial e final e gostaria que na cláusula where o SQL buscasse os registros do mes anterior ao informado. Exemplo: select tmov.datasaida ,tmov.numeromov from tmov where tmov.datasaida between '01/02/2010' and '28/02/2010' order by tmov.datasaida Essa sentença me retorna os registros de fevereiro de 2010 aí pensei em algo do tipo select tmov.datasaida ,tmov.numeromov from tmov where tmov.datasaida between convert(datetime, convert(datetime, '01/02/2010')-30) and convert(datetime, convert(datetime, '28/02/2010')-30) order by tmov.datasaida porém dessa forma eu obtenho apenas os registros cuja data comece do dia 04/01/2010 até a data 29/01/2010. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Excluído Postado 5 de Abril de 2010 Tópicos Que Criei: 68 Tópicos/Dia: 0.01 Meu Conteúdo: 997 Conteúdo/Dia: 0.15 Reputação: 4 Pontos/Conquistas: 5.604 Conteúdo Resolvido: 0 Dias Ganho: 5 Status: Offline Idade: 51 Denunciar Compartilhar Postado 5 de Abril de 2010 Pô Angelo, esse "Moçada" pegou pesado heim, rs rs rs. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Thiago gomes - TG Postado 5 de Abril de 2010 Tópicos Que Criei: 1 Tópicos/Dia: 0.00 Meu Conteúdo: 39 Conteúdo/Dia: 0.01 Reputação: 0 Pontos/Conquistas: 205 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Denunciar Compartilhar Postado 5 de Abril de 2010 Moçada, gostaria de pedir uma ajuda de vocês para a seguinte situação:Eu preciso recuperar determinados registros cujo os dados são filtrados pelo campo data de saida para realizar um cálculo de saldo anterior, ou seja, o usuário irá informar uma data inicial e final e gostaria que na cláusula where o SQL buscasse os registros do mes anterior ao informado. Exemplo: select tmov.datasaida ,tmov.numeromov from tmov where tmov.datasaida between '01/02/2010' and '28/02/2010' order by tmov.datasaida Essa sentença me retorna os registros de fevereiro de 2010 aí pensei em algo do tipo select tmov.datasaida ,tmov.numeromov from tmov where tmov.datasaida between convert(datetime, convert(datetime, '01/02/2010')-30) and convert(datetime, convert(datetime, '28/02/2010')-30) order by tmov.datasaida porém dessa forma eu obtenho apenas os registros cuja data comece do dia 04/01/2010 até a data 29/01/2010. Angelo, Tenta assim cara: declare @data Datetime set @data = '2010-02-01' print @data select tmov.datasaida ,tmov.numeromov from tmov where month(datasaida) = (month(@data)-1) and year(datasaida)= year(@data) order by tmov.datasaida Essa variável @data seria o parametro que você está passando. OBS: Não funciona com o mes de janeiro (pois 1-1 = 0), tenta contornar isso. ^^ Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Angelo Louzada Postado 5 de Abril de 2010 Tópicos Que Criei: 10 Tópicos/Dia: 0.00 Meu Conteúdo: 21 Conteúdo/Dia: 0.00 Reputação: 0 Pontos/Conquistas: 213 Conteúdo Resolvido: 0 Dias Ganho: 0 Status: Offline Idade: 39 Dispositivo: Windows Autor Denunciar Compartilhar Postado 5 de Abril de 2010 Angelo,Tenta assim cara: declare @data Datetime set @data = '2010-02-01' print @data select tmov.datasaida ,tmov.numeromov from tmov where month(datasaida) = (month(@data)-1) and year(datasaida)= year(@data) order by tmov.datasaida Essa variável @data seria o parametro que você está passando. OBS: Não funciona com o mes de janeiro (pois 1-1 = 0), tenta contornar isso. ^^ Se alguém passar pela mesma situação que eu, conseguir resolver da seguinte forma: Primeiro criei uma função create function fn_CalculoMesAnt ( @datainicial datetime, @datafinal datetime ) returns datetime as begin declare @dtIni datetime declare @dtFim datetime set @dtIni = @datainicial set @dtFim = @datafinal declare @dtFimProxMes varchar(10) set @dtFimProxMes = cast(year(convert(datetime, @dtFim,103))as char(4))+right('00'+cast(month(convert(datetime, @dtFim,103))as varchar(2)),2)+'01' return @dtFimProxMes end depois fiz a chamada da função da seguinte forma: select tmov.datasaida ,tmov.numeromov from tmov where tmov.datasaida between dateadd(mm,-1,convert(datetime, :Data_Inicial,103)) and dateadd(dd,-1, dbo.fn_CalculoMesAnt(:Data_Inicial,:Data_Final)) order by tmov.datasaida E funcionou perfeitamente. Até a próxima pessoal... Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
Participe da conversa
Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.