Oracle SQL 関数 : LPAD, RPAD : 文字列の前後処理
strRet := LPAD( strSrc , n [, strPad ] ); strRet := RPAD( strSrc , n [, strPad ] ); LPAD及びRPADは文字列データ strSrc を左側(右側に)連続してstrPadを埋めてn桁分の文字列を返します。 strPad はデフォルトで空白文字。
SQL> SELECT 2 '<' || LPAD('ABC',10) || '>' AS LPAD1 3 ,'<' || LPAD('ABC',10,'*') || '>' AS LPAD2 4 ,'<' || LPAD('ABC',10,'*+') || '>' AS LPAD3 5 ,'<' || LPAD('ABC',10,'1234567890') || '>' AS LPAD4 6 ,'<' || RPAD('ABC',10) || '>' AS RPAD1 7 ,'<' || RPAD('ABC',10,'*') || '>' AS RPAD2 8 ,'<' || RPAD('ABC',10,'*+') || '>' AS RPAD3 9 ,'<' || RPAD('ABC',10,'1234567890') || '>' AS RPAD4 10 FROM DUAL; LPAD1 LPAD2 LPAD3 LPAD4 RPAD1 RPAD2 RPAD3 RPAD4 ------------ ------------ ------------ ------------ ------------ ------------ ------------ ------------ < ABC> <*******ABC> <*+*+*+*ABC> <1234567ABC> <ABC > <ABC*******> <ABC*+*+*+*> <ABC1234567>
ところでこの LPAD、RPAD 関数を使って、指定文字を指定桁数分の文字列(連続文字列)として生成できます。
以下にその例を示します。[strSrc]と[strPad]に同じ文字を指定し、桁数には必要となる数値を指定します。
SQL> SELECT 2 RPAD('9', 10, '9') AS "RPAD:10桁表示" 3 ,LPAD('9', 10, '9') AS "LPAD:10桁表示" 4 FROM DUAL; RPAD:10桁表示 LPAD:10桁表示 -------------------- -------------------- 9999999999 9999999999
この処理を関数化してみましたので、以下に示します。
SQL> CREATE OR REPLACE FUNCTION CHAR_REPEAT ( 2 InChar IN VARCHAR2 3 ,InUnit IN NUMBER 4 ) 5 RETURN VARCHAR2 6 IS 7 UnitWk NUMBER; 8 BEGIN 9 UnitWk := InUnit; 10 IF UnitWk <= 1 THEN 11 UnitWk := 1; 12 END IF; 13 RETURN LPAD(InChar, UnitWk, InChar); 14 END; 15 / ファンクションが作成されました。 SQL> SELECT 2 CHAR_REPEAT('A', 0) || ' / ' || 3 CHAR_REPEAT('0', 5) || ' / ' || 4 CHAR_REPEAT('9', 9) 5 FROM DUAL; CHAR_REPEAT('A',0)||'/'||CHAR_REPEAT('0',5)||'/'||CHAR_REPEAT('9',9) -------------------------------------------------------------------------------- A / 00000 / 999999999