Função para retirar espaços em branco do meio de uma string

8,462 views
Skip to first unread message

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 2:35:16 PM3/18/14
to sqlse...@googlegroups.com
Srs,
eu acho que já vi na lista mas não encontrei.
Eu preciso gerar uma função para retirar espaços em branco do meio de uma string.
Estou validando o db de um cliente e esta mais bagunçado que qq outro que já vi.

Rtrim e Letrim não me ajuda, pois os espaços estão no meio dos textos e podem variar de 2, 3 4 espaços.
Alguém tem uma função guardada por ai ou dar uma luz?


Obrigado!!

Paulo Correia

unread,
Mar 18, 2014, 2:47:36 PM3/18/14
to sqlse...@googlegroups.com
Advaldo..



DECLARE @texto varchar(max)


SET @texto = 'vamos usar a funcao replace'

SELECT REPLACE(@texto,' ','')




--

---
You received this message because you are subscribed to the Google Groups "SQLServerDF" group.
To unsubscribe from this group and stop receiving emails from it, send an email to sqlserverdf...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Obrigado
----------------------------------------
Paulo Roberto Correia Junior

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 2:50:30 PM3/18/14
to sqlse...@googlegroups.com
Opa Paulo, 
quando se tem dois espaços na mesma string, funciona, mas minha base pode ter dois, tres, 5, 10 espaços... imagina montar um replace para cada um deles.
Creio que tem uma forma mais fácil de fazer.

Obrigado!

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 2:51:10 PM3/18/14
to sqlse...@googlegroups.com
Um exemplo pratico de como a base esta:

declare @table table (campo char(100))
insert into @table values ('teste com um espaço no sql')
insert into @table values ('teste com dois  espaço no sql')
insert into @table values ('teste com tres   espaço no sql')
insert into @table values (null)

select replace(campo,'  ',' ')
from @table


Paulo Correia

unread,
Mar 18, 2014, 2:51:32 PM3/18/14
to sqlse...@googlegroups.com
cara vc pode ter mil espaços q

Paulo Correia

unread,
Mar 18, 2014, 2:52:00 PM3/18/14
to sqlse...@googlegroups.com
ops 

vc pode ter mil espaços que vai funcionar

DECLARE @texto varchar(max)


SET @texto = 'vamos usar a               funcao           replace'

SELECT REPLACE(@texto,' ','')

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 2:55:14 PM3/18/14
to sqlse...@googlegroups.com
ah sim, mas eu preciso corrigir minha base, onde se tem dois espaços trocar por um somente, e assim por diante...

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 3:07:05 PM3/18/14
to sqlse...@googlegroups.com
Resolvi por aqui.
Criei um while com o char(32) duplicado em cada linha de minha base para deixar somente um.
No meu caso, performance não era necessário pois eh uma base off-line e somente serve para uma révia validação. 

Vlw!!!

Marcos Antonio Felisberto

unread,
Mar 18, 2014, 3:23:51 PM3/18/14
to sqlse...@googlegroups.com
agooooora entendi...

Vc quer retirar os espaços duplicados....

E não TODOS os espaços....

Por isso a galera te passou o exemplo do Replace.
Enviado via iPhone

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 3:26:40 PM3/18/14
to sqlse...@googlegroups.com
Exato Marcos, acabei me expressando mal no inicio do post. =\

Adamo Tonete

unread,
Mar 18, 2014, 3:44:24 PM3/18/14
to sqlse...@googlegroups.com
Segue:
 
declare @table table (campo char(100))
insert into @table values ('teste com um espaço no sql')
insert into @table values ('teste com dois  espaço no sql')
insert into @table values ('teste com tres    espaço no sql')
insert into @table values ('teste com tres    espaço no sql        bbbb   cc d    e    ff')
insert into @table values ('teste com a        espaço       no sql')
insert into @table values (null)

select replace(replace(replace(campo,'   ',' '), '  ', ' '), '  ', ' ')
from @table


Atenciosamente,

Marcos Antonio Felisberto

unread,
Mar 18, 2014, 3:51:11 PM3/18/14
to sqlse...@googlegroups.com
Esquenta não...

Na próxima, paga uma cerva pra galera!!!!!

Agora voltando ao problema.

Eu já tive situações semelhantes e fiz algumas "soluções criativas" (gambiarra) pra resolver....

Tenho até vergonha de postar o código.

Era um tal de if exists update set campo = replace(campo, ' ', ' ') numa implantação bem porca.

E no mesmo cenário que você, com base offline onde não tive preocupação com performance...

Mas dá uma conversa legal a manipulação de strings para validação de input de dados.

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 3:54:26 PM3/18/14
to sqlse...@googlegroups.com
A cerva vai ficar cara, pois estou em SP, e do que jeito que alagou a cidade por aqui, chega ai em Brasilia daqui a um ano rs

a minha solução também não foi nada bonita, mas para uma base off-line ficou assim.
Uma dia desses eu arrumo esta gambeta e faço uma função descente.


Adamo Tonete

unread,
Mar 18, 2014, 3:58:39 PM3/18/14
to sqlse...@googlegroups.com
Boa Tarde Pessoal
essa solução que postei acredito que seja a de menor esforço:

select replace(replace(replace('minha string     com vários         espaços     teste        a     b   c    d','   ',' '), '  ', ' '), '  ', ' ')

Deve ter algum bug, mas.. segue como sugestão.

Atenciosamente,

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 4:03:03 PM3/18/14
to sqlse...@googlegroups.com
@Adamo, funcionou, ao menos em testes rápidos que realizei.

Obrigado!

Rodrigo Ribeiro Gomes

unread,
Mar 18, 2014, 4:58:28 PM3/18/14
to sqlse...@googlegroups.com
Olha que solução interessante.... 

Apenas para clarear as idéias, e abrimos espaço para a criatividade. 


O que mais gostei nesta solução é que foi apenas com o uso da função replace... Ou seja não iremos precisar de uma UDF (que é bem menos eficiente para muitos registros).

[]'s Rodrigo Ribeiro Gomes
MCITP: Database Administrator 2008
MCITP: Database Developer 2008

061 8106-2710

Gustavo Maia

unread,
Mar 18, 2014, 5:05:23 PM3/18/14
to sqlse...@googlegroups.com
Além de ser uma sacada excelente, é uma solução simples e escalável.

Ótimo achado, Rodrigo.

Gustavo Moura Fé Maia
MCTS | MCP | MTA

Advaldo de Paiva Moreira

unread,
Mar 18, 2014, 9:37:10 PM3/18/14
to sqlse...@googlegroups.com

Caraca, bom link mesmo....

Vlw

Reply all
Reply to author
Forward
0 new messages