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