2014-03-06 3 views
3

번역을 사용하여 VARCHAR2에서 특정 문자를 삭제하려고합니다. 그러나 160 (일부 종류의 공백) 및 243 (단락 제어 문자?)은 모두 INSTRTRANSLATE에서 감지 할 수없는 "팬텀"문자 인 것처럼 보입니다. LENGTH이 작동하지만 문자열의 유일한 문자 인 경우에만 작동합니다. LENGTH(CHR(160))1을 반환하지만 LENGTH(CHR(160) || CHR(110))2을 반환 할 때 1을 반환합니다. 나는 REPLACE이 문자열에서 이러한 유령 문자를 제거하는 데 사용되지만 더 읽기 쉽고 유지하기가 쉽기 때문에 번역이 더 좋습니다. 반면에 긴 중첩 또는 REPLACE 기능은 복잡합니다.일부 문자에서 작업을 변환하지 않는 이유는 무엇입니까?

교체를 사용하지 않고 VARCHAR2에서 이러한 문자를 제거하는 다른 방법이 있습니까?

EDIT : 다른 곳의 문자 243은 으로 등록됩니다. 그러나 오라클은 명시 적으로 선택했을 때이 문자를 표시하는 데 아무런 문제가 없습니다. CHR(243)을 선택하면 블록 교체 문자 만 표시됩니다. 또한 this source은 제어 코드이기 때문에보다 의미가있는 단락 문자를 가리 킵니다.

+0

'ASCIISTR()'.. –

+0

@OracleUser이 실제로 점점 더 가까이 그들을 제거 할 수있다. 그러나 지원되지 않는 문자는 제거하지 않고 '\ FFFD \ FFFD'로 변환합니다. 그것이 그들을 개조 할 수 있다면, 그것도 그것을 제거 할 수 있다고 판단합니다. '\ FFFD'가 열에 유효한 문자열 인 경우 정규 표현식을 사용할 수 없습니다. – oscilatingcretin

+0

샘플에 대해'dump (your_column)'을 줄 수 있습니까? –

답변

0

정규 표현식은 어떻게 사용합니까? 이것은 아무것도 문자 160 또는 243을 교체하여 문제가 문자를 제거합니다

SQL> select regexp_replace('abc' || chr(160) || chr(243) || 'def', '(' || chr(160) || '|' || chr(243) || ')', '') from dual; 

REGEXP 
------ 
abcdef 

SQL>