我有一個FUNCTION
,它用一個單獨的水平空間替換STRING
中的多個(連續)水平空間;Oracle - 字符串 - 標點符號格式化函數
例如
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'
如果STR_ORIG = 'Hello.Marc'
輸出將成爲'Hello. Marc'
如果STR_ORIG = 'Hello(Marc)'
輸出將成爲'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.
*注意:當在閉括號後面直接出現逗號或完全停止符時,而不是'One HORIZONTAL SPACE
'規則,它將使用'No HORIZONTAL SPACE
'規則。
我認爲FUNCTION
是這個問題的最佳方法(我已經探索過使用純SQL(REG_EXP
),但代碼開始變得相當混亂 - 主要是由於數據不一致)。另外,如果我想在將來添加其他規則(例如,強調下劃線的規則),我假設FUNCTION
會更容易維護。不過,我一如既往接受專業人士的建議。
非常感謝提前。
這是一流的@Kaushik Nayak!我真的很感激你花時間工作 - 非常感謝。 – MAndrews