2010-02-10 5 views
0

일부 문자열 필드에 인쇄 할 수없는 문자가있는 것으로 보이는 Sybase 데이터베이스에서 작업 중이며 일부 처리 코드가 삭제됩니다. 언뜻보기에는 줄 바꿈과 캐리지 리턴 만있는 것으로 보였지만 거기에는 ESC 문자, 일부 악센트 부호가있는 문자 및 기타 기이 한 문자가 포함 된 ASCII 코드 27이 있습니다.Sybase : SQL을 사용하여 CHAR 또는 VARCHAR 필드에서 인쇄 할 수없는 문자를 제거하려면 어떻게합니까?

데이터베이스를 변경할 수있는 직접 액세스 권한이 없으므로 잘못된 데이터를 변경하는 것은 옵션이 아닙니다. 지금은 그냥 필터링하여 처리해야합니다. 우리는 하나의 데이터베이스에서 테이블 데이터를 내보내 야간 배치 프로세스에서 다른 애플리케이션이 사용하는 데이터베이스에로드하려고합니다.

이상적으로는 문자 목록을 전달하고 Sybase가 제거 된 문자로 데이터를 반환하도록하는 기능을 갖고 싶습니다. 가능하다면 평범한 SQL에서 할 수있는 일을 계속하고 싶습니다. FIELD1, 않는 str_replace로 (FIELD1, (0-31), NULL) (FIELD2, (0-31), NULL) 31

선택 않는 str_replace -이 같은

뭔가 ASCII 0 문자를 제거합니다 as FIELD2 from table

지금까지 str_replace가 가장 가까운 위치에 있지만 한 문자열을 다른 문자열로 바꿀 수 있습니다. 문자 범위에 대한 지원이 없으며 위의 작업을 수행 할 수 없습니다.

유닉스 서버에서 Sybase ASE 12.5를 실행 중입니다. 이 같은

답변

0

뭔가베이스처럼 T-SQL을 사용하여 SQL 서버에서 작동합니다

while @@ROWCOUNT > 0 
    UPDATE TheTable 
    SET strColumn = REPLACE(strColumn, SUBSTRING(strColumn, 
     PATINDEX('%[^a-zA-Z0-9 ]%', 
     strColumn collate Latin1_General_BIN), 1), '') 
    WHERE PATINDEX('%[^a-zA-Z0-9 ]%', 
     strColumn collate Latin1_General_BIN) <> 0 

patindex function 적어도베이스에 존재하는 것으로 보인다.

데이터 정렬은 2 진수와 일치해야합니다. 그렇지 않으면 [a]은 'á'와 일치합니다.

+0

정보 주셔서 감사합니다. 나는 patindex 기능에 대해 몰랐다. 거의 나를 거기에 데려다 줄 것 같은데. 실제로 테이블의 데이터를 수정할 수있는 권한이 없으므로 추출 중에 잘못된 데이터 만 필터링하면됩니다. 나는 또한 우리가 사용하고있는 Sybase의 버전이 콜레이트 함수를 갖고 있다고 생각하지 않는다. 그러나 우리는 "물건"이라는 기능을 가지고 있습니다. Stuff "한 문자열에서 지정된 수의 문자를 삭제하고 다른 문자열로 바꾼 문자열을 반환합니다." 따라서 patindex를 사용하여 삭제하고 삭제할 필요가있는 문자를 찾으면 우리는 설정되어 있다고 생각합니다. –

관련 문제