주어진 위치에서 문자를 삭제할 수 있습니까?오라클의 주어진 위치에서 문자 제거
내 말은 다음과 같습니다 : PANCAKES 그리고 두 번째 문자 (이 경우 'A')를 제거하고 싶습니다. 따라서 PNCAKES를 내 수익으로 사용하고 싶습니다.
번역이 작업이 아닙니다. 이 작업을 대체하지 않습니다. 정규식은 복잡합니다 ...
아이디어가 있습니까?
주어진 위치에서 문자를 삭제할 수 있습니까?오라클의 주어진 위치에서 문자 제거
내 말은 다음과 같습니다 : PANCAKES 그리고 두 번째 문자 (이 경우 'A')를 제거하고 싶습니다. 따라서 PNCAKES를 내 수익으로 사용하고 싶습니다.
번역이 작업이 아닙니다. 이 작업을 대체하지 않습니다. 정규식은 복잡합니다 ...
아이디어가 있습니까?
예 :
SUBSTR('PANCAKES', 0, INSTR('PANCAKES', 'A', 1, 1)-1) || SUBSTR('PANCAKES', INSTR('PANCAKES', 'A', 1, 1)+1)
내가 함께 테스트하기 위해 Oracle 인스턴스가없는, 정확한 위치를 얻기 위해 -1/+ 1 조정할 수도 있습니다.
참고 문헌 :
예 올바른 순서로 REPLACE 및 SUBSTR을 수행하면 트릭이 수행됩니다.
최종 결과는 제거 된 char 이전의 SUBSTR과 char 뒤의 SUBSTR의 연결이어야합니다.
전체 열이 하나의 단어 일 경우 업데이트 만 수행 할 수 있습니다. 단어가 다른 문자열에 있으면 REPLACE를 래퍼로 사용할 수 있습니다.
이 같은 것을 사용할 수 있습니다. – alex
당신은 강하게 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 전문가가 정규 표현식에 익숙해지면 텍스트 입력 작업에 많은 힘을 실어주는 것이 좋습니다.
또는 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;
당신은 예는 매우 감사 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;
코드를 약간 설명해주십시오. –
REGEXP_REPLACE는 Oracle 10g +의 옵션입니다. http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/functions130.htm#SQLRF06302 –
작동. 감사! 정규식에 대해 생각하고 있었지만 다소 복잡합니다. – alex
@alex : 정규식에 더 익숙해 지려면 http://www.regular-expressions.info/를 사용하는 것이 좋습니다. –