Retirar Espaço em Branco com Código na tabela ASCII
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!
Wylliam
Curtidas 0
Melhor post
Jothaz
20/01/2016
Se for SQL Server:
Select rtrim(ltrim(sua-var))
GOSTEI 1
Mais Respostas
Wylliam
20/01/2016
Bom dia! O banco é ORACLE 11g, ele não retira o espaço em branco nem com trim(ltrim ou rtrim), nem com replace.
GOSTEI 0
Marcos P
20/01/2016
Certeza que esse espaço é, realmente, um espaço ?
Será que não é um outro carácter de controle ( TAB, por exemplo ) ?
Será que não é um outro carácter de controle ( TAB, por exemplo ) ?
GOSTEI 1
Wylliam
20/01/2016
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?
GOSTEI 0
Marcos P
20/01/2016
horizontal tab (HT) : CHAR(9)
vertical tab (VT) : CHAR(11)
http://www.theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
vertical tab (VT) : CHAR(11)
http://www.theasciicode.com.ar/ascii-control-characters/horizontal-tab-ascii-code-9.html
GOSTEI 1
Wylliam
20/01/2016
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:
[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:
Obs: o chr(32) consegue ser removido com o TRIM.
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.
GOSTEI 0
Fabiano Carvalho
20/01/2016
Esse caracter é o ENTER que por sua vez é o char(13)
GOSTEI 0