STRING
내의 여러 (연속) 수평 공간을 단일 수평 공간으로 대체하는 FUNCTION
이 있습니다.오라클 - 문자열 - 구두점 형식 지정 기능
STR_ORIG = 'Hello World'
STR_NEW = 'Hello World'
기능은 다음과 같습니다.
CREATE OR REPLACE FUNCTION CP_RDN_PUNCT(
INS VARCHAR2)
RETURN VARCHAR2
AS
OUTSTR VARCHAR2(4000);
STR VARCHAR2(4000);
BEGIN
STR := INS;
WHILE (INSTR(STR,' ',1) > 0)
LOOP
OUTSTR := OUTSTR || ' ' || SUBSTR(STR,1,INSTR(STR,' ',1) - 1);
STR := TRIM(BOTH ' ' FROM SUBSTR(STR,INSTR(STR,' ',1)));
END LOOP;
OUTSTR := OUTSTR || ' ' || TRIM(STR);
RETURN TRIM(OUTSTR);
END CP_RDN_PUNCT;
그러나, 나는이 FUNCTION
을 확장하고 싶습니다 그래서 기본적인 문장 형식 (쉼표, 마침표 및 괄호)를 보정 할 수 있습니다. 그러나 FUNCTION이 여러 개의 (연속적인) 수평 공간을 계속 제거하는 것이 중요합니다.
예 : 출력이 출력 될 것 STR_ORIG = 'Hello.Marc'
경우 'Hello, Marc'
이 'Hello. Marc'
STR_ORIG = 'Hello(Marc)'
경우 출력이 'Hello (Marc)'
이 될 것입니다 될 것 STR_ORIG = 'Hello , Marc'
경우
Comma;...............One HORIZONTAL SPACE after a Comma.
No HORIZONTAL SPACE before a Comma.
Full Stop;...........One HORIZONTAL SPACE after a Full Stop.
No HORIZONTAL SPACE before a Full Stop.
Open Parenthesis;....No HORIZONTAL SPACE after an Open Parenthesis.
One HORIZONTAL SPACE before an Open Parenthesis.
Closed Parenthesis;..One HORIZONTAL SPACE after an Closed Parenthesis*.
No HORIZONTAL SPACE before an Closed Parenthesis.
* 참고 : 닫힌 괄호 바로 뒤에 쉼표 또는 전체 정지가 있으면 'HORIZONTAL SPACE
'규칙 대신 'No HORIZONTAL SPACE
'규칙이 사용됩니다.
FUNCTION
이이 문제에 대한 최선의 방법이라고 생각합니다. (순수한 SQL (REG_EXP
)을 사용하여 탐색했지만 코드가 매우 복잡해지기 시작합니다. 주로 데이터의 불일치로 인해). 또한 미래에 추가 규칙 (예 : 밑줄 규칙)을 추가하려는 경우 FUNCTION
을 유지 관리하기가 더 쉽다고 가정합니다. 그러나 언제나처럼 나는 전문가로부터 제안을 받는다.
미리 감사드립니다.
이것은 훌륭한, @ Kaushik Nayak! 이 일을 할 시간을 내 주셔서 감사합니다. 많은 감사드립니다. – MAndrews