none
Como copiar parte de um campo em outro campo e apaga-lo em seguida ?

    Pergunta

  • bom dia pessoal, 

    eu possuo uma tabela em que tenho um campo chamado con_obs e outro que se chama 
    con_CPF,  no con_obs foram incluidos alguns registros de CPF (em alguns casos está apenas o CPF e em outros ja existia informação e o CPF foi separado com uma /CPF:) 

    Ex. ( con_obs quando estava vazia)
    'CPF: XXX.XXX.XXX-XX'
    (con_obs quando ja havia sido gravado outra informação antes do CPF)
    'alguma informação/CPF:XXX.XXX.XXX-XX'

    eu preciso copiar todos os CPF's para o campo con_CPF e apaga-los do campo con_obs

    alguem pode me ajudar ??

    segunda-feira, 27 de fevereiro de 2012 12:18

Respostas

  • O update ficaria assim :

    BEGIN TRAN
    
    	update TableName set
    	con_cpf = con_obs
    	where dbo.fn_cpf(con_obs) = 1
    	/* Onde fn_cpf é uma função para validação de cpf´s que retorna 1 quando o módulo 11 do
    	cpf for verdadeiro*/
    	GO
    	update TableName set
    	con_obs = null
    	where con_cpf = con_obs
    	
    COMMIT	


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    • Marcado como Resposta CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 17:06
    segunda-feira, 27 de fevereiro de 2012 13:31
  • Segue um exemplo...MAS para este exemplo funcionar o campo de observação deve seguir as regras:
    - O CPF sempre será a última informação do campo, exemplo: Qualquer coisa / CPF: xxxxx
    - O CPF sempre vem depois da String "CPF:"

    create table #teste
    (
        obs varchar(max),
        cpf varchar(max)
    )
    go

    insert into #teste values ('CPF:357.658.625-01', null)
    insert into #teste values ('qualquer coisa/CPF:357.658.625-01', null)

    update    #teste
    set        cpf = substring (obs, PATINDEX('%CPF:%',obs) + 4, len(obs))
    where    obs like '%CPF:%'

    select * from #teste


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert

    • Marcado como Resposta CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 17:06
    segunda-feira, 27 de fevereiro de 2012 13:33
  • glr eu consegui \o/

    eu fiz assim 

    update teste1 set obs =  substring (obs,0, CharIndex ('/CPF:', obs, 1))where obs  like '%/CPF:%'

    OBG de novo a td mundo que  respondeu =D

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

    para quem estiver com o mesmo problema que eu estava a solução que eu encontrei foi ...

    --COPIAR PARA CAMPO CPF
    update    teste1 
    set  CPFCNPJ = substring (obs, PATINDEX('%CPF:%',obs) , len(obs))
    where    obs like '%CPF:%'
    update    teste1 
    set  CPFCNPJ = substring (obs, PATINDEX('%CNPJ:%',obs) , len(obs))
    where    obs like '%CNPJ:%'




    --APAGA CAMPO OBS
    update teste1 
    set obs = case
    when CharIndex ('/CPF:', obs, 1)<> 0 then 
    substring (obs,0, CharIndex ('/CPF:', obs, 1))
    when CharIndex ('/CNPJ:', obs, 1)<> 0 then 
    substring (obs,0, CharIndex ('/CNPJ:', obs, 1))
    when CharIndex ('/CPF:', obs, 1)= 0 AND CharIndex ('/CNPJ:', obs, 1)= 0  then 
    NULL
    end;

    • Marcado como Resposta CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 17:06
    • Editado CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 19:31 melhorar resposta
    segunda-feira, 27 de fevereiro de 2012 17:06

Todas as Respostas

  • Camillo, bom dia,

    Eu sugiro que antes de realizar este update, vc tenha em mãos um função que valide se o dado que está na coluna con_obs realmente é um CPF valido. É importante fazer esta validação pois, pode haver em sua tabelas dados referente a observações da linha e que não poderá ser apagado.

    Eu tenho essa função que valida o CPF, se precisa eu coloco aqui pra vc.

    E o mais importante: faça backup da tabela antes de iniciar o processo. Só pra garantir.

    Abs.


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    segunda-feira, 27 de fevereiro de 2012 13:31
  • O update ficaria assim :

    BEGIN TRAN
    
    	update TableName set
    	con_cpf = con_obs
    	where dbo.fn_cpf(con_obs) = 1
    	/* Onde fn_cpf é uma função para validação de cpf´s que retorna 1 quando o módulo 11 do
    	cpf for verdadeiro*/
    	GO
    	update TableName set
    	con_obs = null
    	where con_cpf = con_obs
    	
    COMMIT	


    Eduardo Gomes - http://www.h1solucoes.com.br - Twitter: @edugp_sp

    • Marcado como Resposta CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 17:06
    segunda-feira, 27 de fevereiro de 2012 13:31
  • Segue um exemplo...MAS para este exemplo funcionar o campo de observação deve seguir as regras:
    - O CPF sempre será a última informação do campo, exemplo: Qualquer coisa / CPF: xxxxx
    - O CPF sempre vem depois da String "CPF:"

    create table #teste
    (
        obs varchar(max),
        cpf varchar(max)
    )
    go

    insert into #teste values ('CPF:357.658.625-01', null)
    insert into #teste values ('qualquer coisa/CPF:357.658.625-01', null)

    update    #teste
    set        cpf = substring (obs, PATINDEX('%CPF:%',obs) + 4, len(obs))
    where    obs like '%CPF:%'

    select * from #teste


    Abraços, Weslley Moura MCP - MCTS - ORA SqlExpert

    • Marcado como Resposta CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 17:06
    segunda-feira, 27 de fevereiro de 2012 13:33
  • Obg pessoal consegui fazer e entender tbm ^^
    eu sou novato com SQL não sei muita coisa .. 

    é só mais uma coisa no caso para transferir esta OK agora como eu faço para apagar o que foi transferido ?
    EX:

    con_obs = qualquer coisa/CPF:XXX.XXX.XXX-XX 

    tranfere do CPF pra frente para a coluna con_CPF ficando assim 

    con_obs = qualquer coisa/CPF:XXX.XXX.XXX-XX 
    con_cpf = CPF:XXX.XXX.XXX-XX 

    como faço para excluir na coluna con_obs da barra pra frente ???

    Vlw galera 
    abçs

    segunda-feira, 27 de fevereiro de 2012 16:53
  • glr eu consegui \o/

    eu fiz assim 

    update teste1 set obs =  substring (obs,0, CharIndex ('/CPF:', obs, 1))where obs  like '%/CPF:%'

    OBG de novo a td mundo que  respondeu =D

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

    para quem estiver com o mesmo problema que eu estava a solução que eu encontrei foi ...

    --COPIAR PARA CAMPO CPF
    update    teste1 
    set  CPFCNPJ = substring (obs, PATINDEX('%CPF:%',obs) , len(obs))
    where    obs like '%CPF:%'
    update    teste1 
    set  CPFCNPJ = substring (obs, PATINDEX('%CNPJ:%',obs) , len(obs))
    where    obs like '%CNPJ:%'




    --APAGA CAMPO OBS
    update teste1 
    set obs = case
    when CharIndex ('/CPF:', obs, 1)<> 0 then 
    substring (obs,0, CharIndex ('/CPF:', obs, 1))
    when CharIndex ('/CNPJ:', obs, 1)<> 0 then 
    substring (obs,0, CharIndex ('/CNPJ:', obs, 1))
    when CharIndex ('/CPF:', obs, 1)= 0 AND CharIndex ('/CNPJ:', obs, 1)= 0  then 
    NULL
    end;

    • Marcado como Resposta CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 17:06
    • Editado CamilloSttrobio segunda-feira, 27 de fevereiro de 2012 19:31 melhorar resposta
    segunda-feira, 27 de fevereiro de 2012 17:06