Função para deixar apenas um espaço entre palavras

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
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Olá pessoal.
Estou aqui fazendo um função para tirar numeros da frase, mas, quando executo a função ele deixa um espaço para cada numero que foi retirado. Se dou um Replace ele tira todos os espaços e deixas as palavras juntas!
A intenção é Deixar apenas 1 espaço entre as palavras. Segue o exemplo:

Selecionar tudo

SELECT TRIM(TRANSLATE( 'Palavras 2349 juntas ',
                                        '1234567890',
                                        '          '))
FROM DUAL
Resultado: 'Palavras juntas'

COM REPLACE

Selecionar tudo

SELECT REPLACE(TRIM(TRANSLATE( 'Palavras 2349 juntas' ,
                               '1234567890',
                               '          ')),' ', NULL)
FROM DUAL
Resultado: 'Palavrasjuntas'


Alguma dica ou sugestão para um estagiário no mundo do ORACLE?
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Estava testando e consegui fazer isso

Selecionar tudo

SELECT REPLACE(REPLACE(TRIM(TRANSLATE( TRANSLATE('PALAVRAS 2349 JUNTAS',' ','_'),
                               '1234567890',
                               '          ')),' ', NULL),'__',' ')
FROM DUAL
já é alguma coisa! Quem tiver mais ideias por favor poste!
Obrigado!
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

arthae escreveu:Estava testando e consegui fazer isso

Selecionar tudo

SELECT REPLACE(REPLACE(TRIM(TRANSLATE( TRANSLATE('PALAVRAS 2349 JUNTAS',' ','_'),
                               '1234567890',
                               '          ')),' ', NULL),'__',' ')
FROM DUAL
já é alguma coisa! Quem tiver mais ideias por favor poste!
Obrigado!

Selecionar tudo

upDATE

SELECT REPLACE(
       REPLACE(
       REPLACE(TRIM(TRANSLATE( 
                    TRANSLATE('PALAVRAS2349 JUNTAS',' ','_'),
                    '1234567890',
                    '          '))
       ,' ', NULL)
       ,'__',' ')
       ,'_',' ')
FROM DUAL
LordElfo
Rank: Analista Pleno
Rank: Analista Pleno
Mensagens: 111
Registrado em: Qui, 22 Fev 2007 2:34 pm
Localização: DF
________________
http://lordelfo.blogspot.com
Thiago Façanha

Opa cara beleza?
Tipo não entendi tua dificuldade...

O seu código do translate está substituindo por ' ' -->vários espaços...
mas o que você deseja é apenas um correto???


então por que não usa assim?

Selecionar tudo

SELECT TRIM(TRANSLATE( 'Palavras 2349 juntas ',
                                        '1234567890',
                                        ' '))
FROM DUAL
Seria isso?
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE

Opa,
creio que ficaria melhor usando REGEXP.

Selecionar tudo

SELECT REGEXP_REPLACE(TRANSLATE('Palavras     2349 juntas      .',' 1234567890',' '), '( ){2,}', ' ')
FROM DUAL;
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Valeu pelas respostas!
@LordElfo
se eu fizer deste jeito ele ainda continua com 2 espaços entre as palavras, a ideia é ter apenas 1!
Mas já ajudou muito! Obrigado!


@Noctifero
Essa função REGEXP deve ter alguma versão do banco? Deu como Invalid Indentifier.
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE

Cara, tou usando a 10 aqui e funciona beleza.
Qual sua versão????
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Noctifero escreveu:Cara, tou usando a 10 aqui e funciona beleza.
Qual sua versão????
Aqui é 9, acho que é só para versão 10 acima! :(
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE

Vi aqui que a versão 9 do banco não possui isso.
Porém achei aqui que alguma alma caridosa disponibilizou sua implementação alternativa dessas funções de expressões regulares:
http://phil-sqltips.blogspot.com/2009/0 ... le-9i.html
arthae
Rank: Programador Sênior
Rank: Programador Sênior
Mensagens: 52
Registrado em: Seg, 09 Mai 2011 1:13 pm
Localização: Porto Alegre - RS
GIVE ME COFFEE AND NO ONE GETS HURT!

Noctifero escreveu:Vi aqui que a versão 9 do banco não possui isso.
Porém achei aqui que alguma alma caridosa disponibilizou sua implementação alternativa dessas funções de expressões regulares:
http://phil-sqltips.blogspot.com/2009/0 ... le-9i.html

Valeu Noctifero, mas aqui na empresa o site é bloqueado por ser blog haha...
e para estagiário eles não liberam os sites assim na maior. Mas consegui tirar uma boa base já (:
Obrigado gente!
DanielNN
Moderador
Moderador
Mensagens: 641
Registrado em: Seg, 03 Set 2007 3:26 pm
Localização: Fortaleza - CE

Ser estagiário é fo*a...
podem nem ver blogs...
heheheheheheh.
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 14 visitantes