update valores errados

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

Bom dia galera, seguinte:
em uma determinada tabela tem uma coluna criada para cadastrar documentos, RG, do tipo VARCHAR2. Só que valores com pontos(.) virgula, letras, lixo.
Quero fazer um update para deixar somente os numeros.
Criei uma rotina usando o translate, só que ele fica doido e atualiza campos colocando letras neles.
O que fazer?

segue codigo:

Selecionar tudo

update enderecos_clientes
SET RG=translate(upper(rg),'ABCDEFGIJLMNOPRSTU,./-;:\_',' ') 
where ...
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:

Cara
tenta utilizar o replace.

Selecionar tudo

select replace('23.683-567','-','') from dual
O resultado é = 23.683567

Tente fazer update assim:

Selecionar tudo

Update REPLACE(replace(CAMPO,'-',''),'.','') from SUA_TABELA
Espero ter ajudado.

Douglas - Madmax :wink:
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:

Segue um exemplo:

Selecionar tudo

update enderecos_clientes 
SET REPLACE(REPLACE(replace(rg,',',''),'.',''),'/','')... e assim vai   
where...
Madmax.
tora34
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 108
Registrado em: Qua, 12 Nov 2008 6:01 pm
Localização: Campo Mourão PR

mas dai vou ter que usar 20 replaces, um seguido do outro.
Será que só tem esse jeito?
SergioLBJr
Rank: Oracle Guru
Rank: Oracle Guru
Mensagens: 448
Registrado em: Ter, 16 Jun 2009 3:07 pm
Localização: Parobé - RS
Sérgio Luiz Bonemberger Junior
Programador Junior
Parobé RS

[]s

Cara olha bem este teu translate, eu testei aqui e ele insere as letras que tu não passou para ele

H, K, V, X, Y, W, Z
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:

O Sergio tem razão !!!

E no proprio site aqui fala sobre translate.

http://glufke.net/oracle/viewtopic.php?t=1397

Abs.

Madmax.
nozes
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 10
Registrado em: Qui, 23 Dez 2010 2:06 pm
Localização: Mesquita-RJ
Emanuel "Nozes" Castro
Analista Programador

Hey Guys...
você pode usar esse translate na hora de atualizar teu campo....caso não atenda totalmente tua necessidade, verifique os argumentos dos campos para incluir ou excluir valores dos mesmos.

Grande abraço e espero ter ajudado..apesar do pequeno atraso de 4 anos...hehehe
;)

c yah :-o
Avatar do usuário
gpilger
Rank: Programador Júnior
Rank: Programador Júnior
Mensagens: 29
Registrado em: Qua, 21 Abr 2010 3:34 pm
Localização: Novo Hamburgo - RS
Gilson Pilger
"Por não saber que erra impossível, ele foi lá e fez" autor desconhecido

já usei os dois, translate e o replace... o ideal é usar o translate, afinal ele foi feito pra isso... abs
marlonpasquali
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 248
Registrado em: Sex, 06 Fev 2009 3:02 pm
Localização: ERECHIM - RS

Translate tem que funcionar. Olha um exemplo:

Selecionar tudo

upper(rpad(nvl(translate(ad.ADDRESS4,'ãÃõÕçÇüÜâÂêÊôÔáÁàÀéÉíÍóÓúÚ!@#$%&*()_+=[]{}/\?:<>|'
,'aAoOcCuUaAeEoOaAaAeEiIoOuU'), ' '), 12))
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Tenta com expressões regulares, fica bem mais sucinto:

Selecionar tudo

select regexp_replace(str, '[^0-9]') from t;
Exemplo:

Selecionar tudo

SQL> with t as (
  2  select 'FG2;L4#4*$¨#H888G&*99@#+00.B^/?"1234{' str from dual)
  3  -- fim dos dados de teste
  4  select regexp_replace(str, '[^0-9]') from t;
 
REGEXP_REPLACE(STR,'[^0-9]')
----------------------------
24488899001234
Responder
  • Informação