Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #96492
    santosclay
    Participante

      Bom 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

      #96493
      santosclay
      Participante

        Galera 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.

        #96494
        burga
        Participante

          no 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;

          #96495
          burga
          Participante

            Se tiver usando o 10g ou mais recente, o melhor é usar regexp_replace:

            SELECT regexp_replace('111RONALDO222','([^[:digit:]])','@') AS "CAMPO1"
            FROM DUAL;

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.