Database/Oracle2013. 8. 11. 18:28

* 일반적으로 오라클에서 공백제거시에 trim이나 replace를 사용하곤 하는데 이러한 함수들을 이용해도

공백이 제거 되지 않는 경우가 있다. 물론 육안상으로는 구분이 불가능하다.

 

아래와 같은 테이블과 데이터가 있다.

select *

from test1;

-- 결과

  ID      NAME
test1   candy
test2   candy

분명 육안상으로는 test1 과 test2가 동일한 NAME인 "candy"를 가지고 있는데,

아래와 같은 결과가 나온다.

1. select *

from test1

where name = 'candy';

 

-- 결과

   ID   NAME
test1 candy

==> test2는 조회되지 않는다.

 

2. select id, name, length(name)

from test1;

 

-- 결과

ID         NAME     LENGTH(NAME)
test1     candy          5
test2     candy          6

==> 육안상으로는 분명이 동일하게 보이지만 length가 다르게 나온다.

 

왜 1번 , 2번 과 같은 결과가 나오는 것일까.

결론적으로는 확인해보니 육안상으로는 확인이 불가능한 공백문자가 들어가 있었다.

 

chr(0)  <--- 이놈이 포함되어 문제가 발생했던 것이다.

 

따라서 이놈을 replace 해주면 문제가 간단히 해결된다.

 

* 처리 후 select

1. select *
from test1
where replace(name, chr(0), '') = 'candy';

 

-- 결과

  ID      NAME
test1   candy
test2   candy

 

2. select id, name, length(replace(name, chr(0), ''))
from test1;

 

-- 결과

ID         NAME     LENGTH(NAME)
test1     candy          5
test2     candy          5


 

trim으로 제거 되지 않는 공백이 분명있음에도 구글 혹은 네이버에서 검색되는 자료가 없어서 올린다~

참고들 하세요~

 

 

 

Posted by 아로나