- Este tópico contém 3 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 5 meses atrás por
burga.
-
AutorPosts
-
20 de outubro de 2010 às 5:59 pm #96492
santosclay
ParticipanteBom dia pessoal tudo bem???
Gostaria de tirar uma dúvida básica (que vergonha rs… rs…)
Estou tentando gerar uma função para resolver um problema que estou passando. Como base comecei a fazer uns testes com a seguinte premissa:
Tenho a STRING “111RONALDO222”. Preciso que ela fique “111@@@@@@@222”.
Executei a seguinte função:
SELECT TRANSLATE('111RONALDO222', 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÁÀÂÄÃÉÈÊËÍÌÎÏÓÒÔÖÕÚÙÛÜÇÑ`~''"!@#$%^&*()_-+=|/{}[]:;,.<>','@') AS "CAMPO1"
FROM DUAL;
Porém o retorno foi
20 de outubro de 2010 às 6:54 pm #96493santosclay
ParticipanteGalera achei a solução…
SELECT REPLACE(TRANSLATE('111RONALDO222','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÁÀÂÄÃÉÈÊËÍÌÎÏÓÒÔÖÕÚÙÛÜÇÑ`~''"!@#$%^&*()_-+=|/{}[]:;,.',' '), ' ','@') AS "CAMPO1"
FROM DUAL;
Porém fiquei com uma dúvida em relação a conceito.
Se eu simplicasse o exemplo em transformar ‘1RO2’ para ‘1@@2’ a clausula ficaria assim:
SELECT REPLACE(TRANSLATE('1RO2','RO',' '), ' ','@') AS "CAMPO1"
FROM DUAL;
Ou seja tenho que colocar dois “espaço” uma para cada caracter da string “RO”. Se a string fosse “ROL” eu teria que aumentar os espaços além de incluir o caracter “L” no primeiro parametro do translate e assim por diante.
Compreendi o conceito da correspondencia, porém imaginei que ao não declarar a correspondecia o caracter declarado no segundo parametro do translate deveria ser aplicado a todos os caracteres do primeiro parametro.
Estou fazendo a leitura correta do caso?
Abraços.
Clayton.
20 de outubro de 2010 às 7:42 pm #96494burga
Participanteno translate a relação é de 1-1 dos caracteres que você quer substituir para os caracteres que você quer que sejam os substitutos… então o correto seria:
SELECT TRANSLATE('111RONALDO222','abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZÁÀÂÄÃÉÈÊËÍÌÎÏÓÒÔÖÕÚÙÛÜÇÑ`~''"!@#$%^&*()_-+=|/{}[]:;,.','@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@') AS "CAMPO1"
FROM DUAL;20 de outubro de 2010 às 7:53 pm #96495burga
ParticipanteSe tiver usando o 10g ou mais recente, o melhor é usar regexp_replace:
SELECT regexp_replace('111RONALDO222','([^[:digit:]])','@') AS "CAMPO1"
FROM DUAL;AutorPostsVisualizando 4 posts - 1 até 4 (de 4 do total)- Você deve fazer login para responder a este tópico.