none
Comparar mês e ano em data RRS feed

  • Pergunta

  • estou desenvolvendo um ETL e preciso da ajuda de vocês, é o seguinte, faço uma rotina para ler o arquivo txt e importar p/ banco mas tem uma regra que preciso resolver, o cliente manda um arquivo txt com campos delimitados com todos os dados de um ano inteiro, o problema é que só posso importar os dados do ultimo mês ou seja preciso comparar todas as datas para ver qual foi o ultimo mês enviado. COMO FAÇO PARA PEGAR A DATA NO FORMATO dd/MM/aaaa E SÓ ACEITAR O ÚLTIMO MÊS (Por exemplorecebo o arquivo com os seguintes campos Nome; Telefone; Endereço; Data)(1linha Joao; 55555; R.xcxxx, 01/01/2010) (2linha Maria;66666;Av.yyyy,30/12/2009) (3linha José;7777;Trav.zzzz; 10/01/2010) Nesse exemplo só posso importar a linha 1 e a linha 3, pois foi o último mês que recebi os dados. Se alguém puder postar um exemplo de como fazer agradeço muito. Recapitulando PRECISO GERAR UMA ROTINA ONDE PEGA TODAS AS DATAS QUE RECEBI COMPARA-LAS POR MÊS E ANO VERIFICAR QUAL É O MAIOR MÊS E ANO DESSAS DATAS E A PARTIR DAI PEGAR TODAS AS DATAS DESSE MÊS E SALVAR NO BANCO. Espero que tenham entendido a minha dificuldade.

    sexta-feira, 19 de fevereiro de 2010 17:24

Respostas

  • Guga bom dia, veja se este exemplo te ajuda:

    DECLARE @T VARCHAR(10) 
    SET @T = '10/01/2010'
    
    
    
    SELECT Mes_do_Txt  = MONTH(CONVERT(DATETIME,@T,103)), 
           MesAnterior = MONTH(DATEADD(MM,-1,GETDATE())), 
           CASE WHEN MONTH(CONVERT(DATETIME,@T,103)) = 
                     MONTH(DATEADD(MM,-1,GETDATE()))
           THEN 'ultimo mês' ELSE 'não é o último mês' END


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Marcado como Resposta Fernanda Simões terça-feira, 2 de março de 2010 13:56
    segunda-feira, 22 de fevereiro de 2010 12:25
  • Pessoal,

    usar um package SSIS que tratasse o conteúdo do arquivo para ver quais linhas devem ser tratadas não seria mais fácil?
    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    • Marcado como Resposta Fernanda Simões terça-feira, 2 de março de 2010 13:56
    segunda-feira, 22 de fevereiro de 2010 15:17

Todas as Respostas

  • Primeiro vc leia esses dados e joga numa classe que possua todos esses campos.
    Essa classe vc adiciona ela em uma lista, e após vc ordena a lista por data, depois é só pegar os ultimos registros.
    vc ja conseguiu ler o txt? qualquer duvida posta o que vc já fez.
    Se sua pergunta foi respondida por favor marque a resposta como certa.
    sexta-feira, 19 de fevereiro de 2010 18:30
  • Oi Danimar,

    eu já li o txt. você consegue postar um exemplo simples de como fazer isso, só para você saber eu trato o campo Data como coluna.
    Obrigado
    sexta-feira, 19 de fevereiro de 2010 19:06
  • Se vc importa o txt para uma tabela do banco pode fazer a seguinte query antes de inserir na tabela devida:

    /* --tabela importada do arquivo
    create table tabelatxt(colunadata datetime)
    insert into tabelatxt select GETDATE()
    insert into tabelatxt select GETDATE()
    insert into tabelatxt select GETDATE()-30
    */

    declare @Dt_Referencia datetime
    select @Dt_Referencia = MAX(COLUNADATA)
    from TabelaTXT

    select *
    from tabelatxt
    WHERE 
    COLUNADATA >= cast(floor(cast(dateadd(dd,day(@Dt_Referencia-1)*-1,@Dt_Referencia) as float)) as datetime) --dia primeiro mes @Dt_Referencia
    and COLUNADATA < dateadd(mm,+1,cast(floor(cast(dateadd(dd,day(@Dt_Referencia-1)*-1,@Dt_Referencia) as float)) as datetime)) --dia primeiro mes posterior

    Fabrício França Lima | MCP, MCTS, MCITP | fabricio_lima_es@hotmail.com
    domingo, 21 de fevereiro de 2010 16:30
  • Guga bom dia, veja se este exemplo te ajuda:

    DECLARE @T VARCHAR(10) 
    SET @T = '10/01/2010'
    
    
    
    SELECT Mes_do_Txt  = MONTH(CONVERT(DATETIME,@T,103)), 
           MesAnterior = MONTH(DATEADD(MM,-1,GETDATE())), 
           CASE WHEN MONTH(CONVERT(DATETIME,@T,103)) = 
                     MONTH(DATEADD(MM,-1,GETDATE()))
           THEN 'ultimo mês' ELSE 'não é o último mês' END


    Se a minha ajuda lhe for útil não esqueça de classificar. Att. Leonardo Marcelino
    • Marcado como Resposta Fernanda Simões terça-feira, 2 de março de 2010 13:56
    segunda-feira, 22 de fevereiro de 2010 12:25
  • Pessoal,

    usar um package SSIS que tratasse o conteúdo do arquivo para ver quais linhas devem ser tratadas não seria mais fácil?
    Se a resposta resolveu sua questão ou problema, classifique-a para manter a qualidade do forum e a confiabilidade dos participantes.

    Alex M. Bastos
    http://bastosalex.spaces.live.com
    • Marcado como Resposta Fernanda Simões terça-feira, 2 de março de 2010 13:56
    segunda-feira, 22 de fevereiro de 2010 15:17