Retirar Espaço em Branco com Código na tabela ASCII

20/01/2016

Boa noite! Estou dando um select em um determinado campo do banco que me retorna o nome de uma cidade, o retorno está vindo assim: 'SANTOS ' com esse espaço em branco no final, tentei fazer um TRIM e tambem uma função pegando o codigo na tabela ASCII chr(32) e dando um replace, porem o espaço em branco continua.... Alguém sabe me dizer qual codigo da tabela ASCII pode ria representar esse espaço em branco que o TRIM do SQL(ORACLE) não consegue remover? Obrigado!

Melhor resposta

20/01/2016

Se for SQL Server:

Select rtrim(ltrim(sua-var))

Jothaz

Responder Citar

Outras Respostas

21/01/2016

Wylliam

Bom dia! O banco é ORACLE 11g, ele não retira o espaço em branco nem com trim(ltrim ou rtrim), nem com replace.
Responder Citar

21/01/2016

Marcos P

Certeza que esse espaço é, realmente, um espaço ?

Será que não é um outro carácter de controle ( TAB, por exemplo ) ?
Responder Citar

21/01/2016

Wylliam

Na verdade não é um espaço porque a função TRIM do Oracle não reconhece com se fosse o caractere chr(32) (espaço em branco) pra remover. Visivelmente é um caractere em branco mas na tabela ASCII deve representar outro caractere que eu não sei qual é. Você sabe qual a representação do TAB na tabela ASCII?
Responder Citar

21/01/2016

Marcos P

horizontal tab (HT) : CHAR(9)
vertical tab (VT) : CHAR(11)

http://www.theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
Responder Citar

21/01/2016

Wylliam

Valeu Cara! Consegui resolver o problema. Eu fiz um bloco de instrução para achar todos os caracteres em branco possíveis e acabei achando esses:

DECLARE 
BEGIN
   FOR i IN 0..255 LOOP
      DBMS_OUTPUT.PUT_LINE('chr'||i|| ':' || chr(i));
   END LOOP;  
END; 


[b]chr(0)
chr(1)
chr(9)
chr(10)
chr(11)
chr(12)
chr(13)
chr(32)
chr(160)[/b]

Então fiz essa função para resolver o problema de quando o trim não funciona:
CREATE OR REPLACE FUNCTION REMOVE_ESPACO(p_String IN VARCHAR2)   
RETURN VARCHAR2
IS
BEGIN
   p_String:= REPLACE(p_String, chr(0), chr(32));
   p_String:= REPLACE(p_String, chr(1), chr(32));
   p_String:= REPLACE(p_String, chr(9), chr(32));  
   p_String:= REPLACE(p_String, chr(10), chr(32));
   p_String:= REPLACE(p_String, chr(11), chr(32));
   p_String:= REPLACE(p_String, chr(12), chr(32));
   p_String:= REPLACE(p_String, chr(13), chr(32));
   p_String:= REPLACE(p_String, chr(160), chr(32));  
   
   RETURN TRIM(p_String);
END;


Obs: o chr(32) consegue ser removido com o TRIM.
Responder Citar

22/01/2016

Fabiano Carvalho

Esse caracter é o ENTER que por sua vez é o char(13)
Responder Citar