none
Consulta de período de data em tabelas diferentes RRS feed

  • Pergunta

  • Boa tarde, gostaria de uma ajuda de vocês, estou com um problema e não estou conseguindo resolver.

    Tenho algumas tabelas no meu trabalho tipo: -> processamento2014, processamento2015, processamento2015 e processamento2017.

    Preciso fazer uma consulta por período, tipo: 15/05/2016 até 15/09/2017 sendo que buscaria na tabela 

    processamento2016 -> 15/05/2016 a 31/05/2016
    processamento2017 -> 01/01/2017 a 15/09/2017. 

    Obrigado a todos.

    terça-feira, 9 de janeiro de 2018 18:00

Respostas

  • Boa tarde,

    Pelo que entendi acredito que seja o caso de utilizar o operador Union All. 

    Considerando que na tabela de processamento2016 existem apenas dados de 2016 e assim por diante, o filtro poderia ficar igual. Ex:

    select * from Processamento2016
    where Data between '20160515' and '20170915'
    
    union all
    
    select * from Processamento2017
    where Data between '20160515' and '20170915'
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 9 de janeiro de 2018 18:24
  • Acho que, se for possível, seria melhor montar essa query na aplicação. No SQL Server acredito que uma alternativa seria utilizar uma query dinâmica. Ex:

    declare @DataIni date;
    declare @DataFim date;
    
    declare @SQL nvarchar(max);
    declare @AnoAux integer;
    declare @AnoIni integer;
    declare @AnoFim integer;
    
    set @DataIni = '20160515';
    set @DataFim = '20170915';
    
    set @AnoIni = Year(@DataIni);
    set @AnoFim = Year(@DataFim);
    set @AnoAux = @AnoIni;
    set @SQL = '';
    
    while @AnoAux <= @AnoFim
      begin
        if @AnoAux > @AnoIni 
            set @SQL = @SQL + ' union all ';
        set @SQL = @SQL + 'select * from Processamento' + cast(@AnoAux as nvarchar);
        set @AnoAux = @AnoAux + 1;
      end
    
    -- print @SQL;
    
    execute sp_executesql @SQL
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 9 de janeiro de 2018 19:04
  • Deleted
    terça-feira, 9 de janeiro de 2018 22:45

Todas as Respostas

  • Boa tarde,

    Pelo que entendi acredito que seja o caso de utilizar o operador Union All. 

    Considerando que na tabela de processamento2016 existem apenas dados de 2016 e assim por diante, o filtro poderia ficar igual. Ex:

    select * from Processamento2016
    where Data between '20160515' and '20170915'
    
    union all
    
    select * from Processamento2017
    where Data between '20160515' and '20170915'
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 9 de janeiro de 2018 18:24
  • So que o meu problema é que essas datas são digitadas pelo usuário, dependendo da data digitada ele devera busca na tabela correta automaticamente.

    Exemplo: 01/08/2013 até 08/07/2014
    Devera buscar nas tabelas referente ao ano 2013 e 2014.
    Pois se eu juntar todas as tabela em uma só, ficara uma tabela muito grande pela quantidade de dados.
    terça-feira, 9 de janeiro de 2018 18:44
  • Acho que, se for possível, seria melhor montar essa query na aplicação. No SQL Server acredito que uma alternativa seria utilizar uma query dinâmica. Ex:

    declare @DataIni date;
    declare @DataFim date;
    
    declare @SQL nvarchar(max);
    declare @AnoAux integer;
    declare @AnoIni integer;
    declare @AnoFim integer;
    
    set @DataIni = '20160515';
    set @DataFim = '20170915';
    
    set @AnoIni = Year(@DataIni);
    set @AnoFim = Year(@DataFim);
    set @AnoAux = @AnoIni;
    set @SQL = '';
    
    while @AnoAux <= @AnoFim
      begin
        if @AnoAux > @AnoIni 
            set @SQL = @SQL + ' union all ';
        set @SQL = @SQL + 'select * from Processamento' + cast(@AnoAux as nvarchar);
        set @AnoAux = @AnoAux + 1;
      end
    
    -- print @SQL;
    
    execute sp_executesql @SQL
    

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    terça-feira, 9 de janeiro de 2018 19:04
  • Deleted
    terça-feira, 9 de janeiro de 2018 22:45
  • OK, obrigado, vou tentar.
    quarta-feira, 10 de janeiro de 2018 18:08