2010-05-26 6 views
2

주어진 위치에서 문자를 삭제할 수 있습니까?오라클의 주어진 위치에서 문자 제거

내 말은 다음과 같습니다 : PANCAKES 그리고 두 번째 문자 (이 경우 'A')를 제거하고 싶습니다. 따라서 PNCAKES를 내 수익으로 사용하고 싶습니다.

번역이 작업이 아닙니다. 이 작업을 대체하지 않습니다. 정규식은 복잡합니다 ...

아이디어가 있습니까?

답변

4

예 :

SUBSTR('PANCAKES', 0, INSTR('PANCAKES', 'A', 1, 1)-1) || SUBSTR('PANCAKES', INSTR('PANCAKES', 'A', 1, 1)+1) 

내가 함께 테스트하기 위해 Oracle 인스턴스가없는, 정확한 위치를 얻기 위해 -1/+ 1 조정할 수도 있습니다.

참고 문헌 :

+0

REGEXP_REPLACE는 Oracle 10g +의 옵션입니다. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions130.htm#SQLRF06302 –

+0

작동. 감사! 정규식에 대해 생각하고 있었지만 다소 복잡합니다. – alex

+0

@alex : 정규식에 더 익숙해 지려면 http://www.regular-expressions.info/를 사용하는 것이 좋습니다. –

0

예 올바른 순서로 REPLACE 및 SUBSTR을 수행하면 트릭이 수행됩니다.

최종 결과는 제거 된 char 이전의 SUBSTR과 char 뒤의 SUBSTR의 연결이어야합니다.

전체 열이 하나의 단어 일 경우 업데이트 만 수행 할 수 있습니다. 단어가 다른 문자열에 있으면 REPLACE를 래퍼로 사용할 수 있습니다.

+0

이 같은 것을 사용할 수 있습니다. – alex

3

당신은 강하게 regexp_replace을 사용하는 것이 좋습니다. 이 첫 눈에 보인다는 짧고 너무 복잡하지 않습니다 :

SELECT REGEXP_REPLACE(S, '^(.{1}).', '\1') 
FROM (
    SELECT 'PANCAKES' 
    FROM DUAL 
) 

다음 인쇄 또는 uprintable 문자 정확히 하나 (.{1})에 대한 ^(.{1}). 검색 (^로 표시) 문자열의 시작부터 패턴 다시 그 문자 중 하나 (.). "정확한"부분은 괄호 안에 닫혀 있으므로 세 번째 함수의 인수 (\1)의 숫자로 일치 그룹으로 참조 될 수 있습니다. 따라서 정규 표현식으로 매치 된 전체 부분 문자열은 'PA'이지만, 'P'만 참조합니다. 문자열의 나머지 부분은 그대로 유지됩니다. 결과는 'PNCAKES'입니다.

문자열에서 N 번째 문자를 제거하려면 두 번째 문자를 제거하는 데 사용 된 패턴의 숫자 '1'을 N-1의 값으로 바꿉니다.

프로그래머 나 IT 전문가가 정규 표현식에 익숙해지면 텍스트 입력 작업에 많은 힘을 실어주는 것이 좋습니다.

1

또는 SUBSTR을 사용하여 사용자 지정 SplitAtPos 함수를 사용하십시오. 장점은 여전히 ​​Oracle v9에서 작동한다는 것입니다.

set serveroutput on 
declare 

s1 varchar2(1000); 
s2 varchar2(1000); 

function SplitAtPos(s in out varchar2, idx pls_integer) 
    return varchar2 
is 
    s2 varchar2(1000); 
begin 
    s2:=substr(s,1,idx-1); 
    s:=substr(s,idx,length(s)-idx+1); 
    return s2; 
end; 

begin 
s1:='Test123'; 
s2:=SplitAtPos(s1,1); 
dbms_output.put_line('s1='||s1||' s2='||s2); 

s1:='Test123'; 
s2:=SplitAtPos(s1,5); 
dbms_output.put_line('s1='||s1||' s2='||s2); 

s1:='Test123'; 
s2:=SplitAtPos(s1,7); 
dbms_output.put_line('s1='||s1||' s2='||s2); 

s1:='Test123'; 
s2:=SplitAtPos(s1,8); 
dbms_output.put_line('s1='||s1||' s2='||s2); 

s1:='Test123'; 
s2:=SplitAtPos(s1,0); 
dbms_output.put_line('s1='||s1||' s2='||s2); 

end; 
0

당신은 예는 매우 감사 pl/SQL

DECLARE 
    v_open NUMBER; 
    v_string1 VARCHAR2(10); 
    v_string2 VARCHAR2(10); 
    v_word VARCHAR2(10); 
BEGIN 
    v_open := INSTR('PANCAKES' ,'A',1); 
    v_string1 := SUBSTR('PANCAKES' ,1, 1); 
    v_string2 := SUBSTR('PANCAKES' ,v_open+1); 
    v_word := v_string1||v_string2; 
END; 
+0

코드를 약간 설명해주십시오. –