Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Update SQL em campos diferentes


Mauricio Pereira

Pergunta

Olá Pessoal...

sou novo no fórum e gostaria muito da ajuda de vocês.

preciso fazer um alteração em uma tabela de meu banco SQL..

Vou explicar e mostrar após o que preciso..

Preciso que um campo atualize vericando o outro campo.

exemplo:

tenho um campo que se chama datainicio e outro datafim.. sendo que preciso que estas datas tenham um período de um ano

de diferença.

datainicio datafim

22/4/2010 22/4/2011

mas eu estou com um grande problema..

tenho diversos campos que estão com a datafim diferentes da datainicio.

exemplo:

datainicio datafim

22/4/2010 31/12/2010

e é isso que eu preciso alterar.

como posso fazer para que ele altere exatamente para um depois o campo datafim em relação o campo datainicio???

sou novato em SQL e por isso pode ser que a minha pergunta seja um absurdo, por isso peço desculpas antecipadamente.

se precisarem de mais informações é só falar ai...

no aguardo de vocês..

desde já agradeço..

:D

Editado por Mauricio Pereira
Link para o comentário
Compartilhar em outros sites

9 respostass a esta questão

Posts Recomendados

  • 0

Pessoal..

verificando o meu problema me deparei com outro..

acho que agora vai ficar pior .. rrsrrsr

o que o Fúlvio passou vai funcionar beleza.. mas eu vi que tem um porém...

vou passar abaixo a imagem...

sql.jpg

eu tenho em algumas campos o ano diferente..

vou precisar que aconteça o seguinte...

tenho no banco alguns campos de datafim que foram inseridos erradamente..

e são estas datas que eu preciso alterar...

as datas inseridas erradas são as seguintes:

2010-12-19

2010-12-20

2010-12-21

2010-12-29

2010-12-30

2010-12-31

preciso que além de mudarem para um ano.

que mudem onde o ano for de 2009 que mude para 2011

e onde for 2010 que também mude para 2011

tudo isso na datafim..

não sei me me entederem bem..

qualquer coisa pode falar ai..

desde já agradeço.

Link para o comentário
Compartilhar em outros sites

  • 0

Depois de rodar o update para alterar a datafim acrescentando 1 ano (de acordo com a datainicio), alguns campos ficaram com data de 2009 e 2010? É isso?

Agora você quer pegar as datas de 2009 e 2010 e colocar 2011? Se for isso, faça os testes com o script:

-- Acrescenta 2 anos para datas de 2009
update NomeTabela  set datafim=(dateadd(year, 2, datafim)) where year(datafim)=2009

-- Acrescenta 1 ano para datas de 2010
update NomeTabela  set datafim=(dateadd(year, 1, datafim)) where year(datafim)=2010

Link para o comentário
Compartilhar em outros sites

  • 0

olá Fulvio..

na verdade eu ainda não rodei o seu script...

montei esse aqui com as informações que você me passou:

update CARDSXUSERSXAPPLICATIONS

set CRDUSRAPP_VALENDDATE=(dateadd(year, 1, CRDUSRAPP_VALSTADATE))

where year(CRDUSRAPP_VALENDDATE)=2010

and CD_ID = 3 and APP_ID = 900

AND CRDUSRAPP_VALENDDATE

IN ('2010-12-19', '2010-12-20', '2010-12-21', '2010-12-30', '2010-12-31')

--------------------------------------------------------------------------

update CARDSXUSERSXAPPLICATIONS

set CRDUSRAPP_VALENDDATE=(dateadd(year, 2, CRDUSRAPP_VALSTADATE))

where year(CRDUSRAPP_VALENDDATE)=2009

and CD_ID = 3 and APP_ID = 900

AND CRDUSRAPP_VALENDDATE

IN ('2010-12-19', '2010-12-20', '2010-12-21', '2010-12-30', '2010-12-31')

sendo que no primeiro update eu estarei mudando a data validade para um ano após a data de início

onde a data de fim de validade for dentre aquelas citadas acima e o ano for de 2010.

o de baixo estarei mudando a data validade para dois anos após a data de início

onde a data de fim de validade for dentre aquelas citadas acima e o ano for de 2009.

é isso mesmo ????

pelo o que eu consegui entender acho que sim..

me corrija por favor Fulvio..

desde já agradeço a atenção concedida.

Link para o comentário
Compartilhar em outros sites

  • 0

Mauricio,

Os dois updates estão filtrando apenas datas de 2010:

... AND CRDUSRAPP_VALENDDATE

IN ('2010-12-19', '2010-12-20', '2010-12-21', '2010-12-30', '2010-12-31')

Sendo assim, o 1º update retornará alguma alteração. O 2º update não terá nenhuma alteração, pois está filtrando datas apenas de 2010.

O que você pode fazer:

- Criar uma temporária com apenas as duas colunas (já filtrando os dados ...CD_ID = 3 and APP_ID = 900...)

- "Updatar" todos os campos CRDUSRAPP_VALENDDATE utilizando o 1º update que postei.

- "Updatar" apenas os campos CRDUSRAPP_VALENDDATE que possuem data de 2009 e 2010 para 2011 (neste update você não precisa referenciar o campo CRDUSRAPP_VALSTADATE. Utilize os dados do próprio campo CRDUSRAPP_VALENDDATE para alterar ele mesmo).

- Depois de conferido as alterações, rode o script na tabela principal (não esquecendo de recolocar os filtros).

Para ficar mais fácil o entendimento, criei uma tabela temporária e manipulei os dados nela. Copiei o script e faça os testes passo a passo:

create table #Tabela (datainicio datetime, datafim datetime)

insert into #Tabela (datainicio) values ('2008-10-03')
insert into #Tabela (datainicio) values ('2008-05-01')
insert into #Tabela (datainicio) values ('2009-04-23')
insert into #Tabela (datainicio) values ('2009-01-23')
insert into #Tabela (datainicio) values ('2010-01-15')
insert into #Tabela (datainicio) values ('2010-02-10')

-- Verifica as inserções
select * from #Tabela

-- Updata o campo datafim, levando em consideração o campo datainicio
update #Tabela set datafim=(dateadd(year, 1, datainicio))

-- Verifica as alterações
select * from #Tabela order by datafim

-- Acrescenta 2 anos para datas de 2009. Perceba que não referencio mais o campo datainicio
update #Tabela set datafim=(dateadd(year, 2, datafim)) where year(datafim)=2009

-- Acrescenta 1 ano para datas de 2010
update #Tabela set datafim=(dateadd(year, 1, datafim)) where year(datafim)=2010

-- Verifica as alterações
select * from #Tabela order by datafim

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...