발견하고 제거하는 비 ascii 문자에서 Oracle 로 varchar2
우리는 현재 중 하나를 마이그레이션 우리의 oracle 데이터베이스를 UTF8 고 우리가 발견되는 몇 가지 기록을 가까이 있는 4000 바이트 varchar 제한. 면 우리도 이러한 마이그레이션을 기록 그들은 실패로 그들의 문자를 포함하는 멀티바이트 UF8 문자입니다. 무엇을 원하는 내 PL/SQL 을 찾은 이러한 문자는 무엇을 보고 그들은 다음을 변경하거나 그들 또는 제거합니다.
내가 하고 싶은 것:
SELECT REGEXP_REPLACE(COLUMN,'[^[:ascii:]],'')
하지만 오라클를 구현하지 않[:ascii:]캐릭터 클래스입니다.
거기에 간단한 방법으로 일을 내가 무엇을 하시겠습니까?
25
16
사용하는 경우에는
ASCIISTR
기능을 변환하는 유니코드를 리터럴의 양식을\nnnn
를 사용하여 다음을 수행할 수 있습니REGEXP_REPLACE
스트립 그럴처럼,그래서......는 필드와 테이블은 당신의 분야와 테이블의 이름을 각각합니다.
나는 생각이 될 것이:
나't 추천 프로덕션 코드,하지만 그것이 의미하고 작동하는 것 같다:
에서 하나의 바이트 ASCII-compatible 인코딩(예:Latin-1),ASCII 문자는 단순히 바이트 범위 0~127. 그래서 같은 것을 사용할 수 있습니다
[\x80-\xFF]
을 감지하는 비-ASCII 문자입니다.선택처럼 보일 수 있습니다 다음 예제:
이's 은 아마 더 직접적인 방법을 사용하여 정규표현식이 있습니다. 운으로,다른 누군가를 제공할 것입니다. 하지만 여기는's what I'd 할 필요 없이 이동한다.
을 만들 PLSQL 기능을받을 입력 문자열을 반환로 varchar2.
에 PLSQL 기능을 수행 asciistr()귀하의 입력이 있습니다. 이 PLSQL 기 때문입할 수 있는 문자열을 반환 4000 고 있는 32K 사용할 수 있로 varchar2 에 PLSQL.
는 기능을 변환하는 비-ASCII 문자\xxxx 로 표기. 그래서 정규 표현식을 사용할 수 있습을 찾고 제거하는 사람들. 그 결과입니다.
다음과 같은 작동:
내가 찾은 해답이 여기:
http://www.squaredba.com/remove-non-ascii-characters-from-a-column-255.html
그런 다음 이를 데이터를 업데이트
다음과 같이 하십시오.
나는 유사한 문제에 대한 블로그 그것은여기서. 을 시작 했을 정규 표현식을 위한 알파 numerics,다음에 추가 몇 가지 기본 문자가를 좋아했:
나는 사용으로 덤프 1016 변형을 줄 진수 문자를 하고 싶었을 대체할 수 있는 다음에 사용자 utl_raw.cast_to_varchar2.
당신이 뭔가를 시도 할 수 있습니다 다음과 같이 검색에 대한 열 포함하는 비-ascii 문자:
참고 사용할 때마다
Oracle's regexp 엔진 일치합니다 특정 문자에서 라틴-1 의 범위뿐만 아니라:이 적용되는 모든 문자를 보면 비슷한 ASCII 문자 다음과 같Ä->AÖ->OÜ->U,etc., 그는[A-Z]은 당신이 알고 있는 무슨이에서 다른 환경,말처럼,Perl.
대와 조롱의 정규 표현식을 변경하십시오에 대한 NVARCHAR2 데이터 이전에는 캐릭터 설정된 업그레이드합니다.
다른 접근 방법의 절단 부분의 필드는'내용할 수 있도 사운 덱스 기능을 제공,당신의 데이터베이스는 유럽의 문자를(예:Latin-1)문자니다. 또는 당신은 단지 작성 기능을 변환하는 문서 라틴-1 의 범위로 유사하게 보이는 ASCII 문자처럼,
-å=>a -ä=>a -ö=>o
의 과정에 대한 텍스트를 블록을 초과하는 4000 바이트 변환 할 때 UTF-8 입니다.
감사,이에 대한 목적입니다. BTW 가 누락되었 single-견적에서 예상입니다.
REGEXP_REPLACE(COLUMN,'[^' || CHR(32) || '-' || CHR(127) || ']', ' '))
내가 사용하는 word-wrap 기능입니다. 때때로이 있었다는 임베디드 NewLine/NL/CHR(10)/0A 에 들어오는 텍스트는 장난하는 것입니다.
응답에 의해 주어진 프란시스코 Hayoz 는 최고입니다. Don't use pl/sql 함수는 경우에는 sql 당신을 위해 그것을 할 수 있습니다.
여기에 간단한 테스트에서 오라클 11.2.03
와"담당자 127-255"
Typ=1Len=30:226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,252,253,254,255
i.e 에 대한 몇 가지 이유가 이전 버전의 오라클 대체하지 않습 char(226)습니다. 용'['||chr(127)||'-'||chr(225)||']' 원하는 결과를 제공합니다. 를 교체해야 하는 경우 다른 문자를 추가하기만 하면 regex 위거나 사용이 중첩된 대체|regexp_replace 경우에는 다른 다음''(문자열이 null).
이렇게 오신 것을 환영합니다.
나는'm 는 조금 늦게 이 질문에 대답하지만,같은 문제를 가지고 있었습니다 최근에(사람들은 잘라내어 붙여 넣는 모든 종류의 물건을 문자열로 우리는't 는 항상 그것이 무엇인지 알). 다음과 같은 단순한 문자 화이트 접근:
에서 edms_staging_table est