RPAD

RPAD

RPAD() 함수는 문자열의 오른쪽을 다른 문자열의 문자로 패딩하거나, 바이너리 값의 오른쪽을 다른 바이너리 값의 바이트로 패딩해요.

base 인자는 pad 인자의 문자/바이트로 length_expr 길이만큼 패딩돼요.

출처: Snowflake SQL Reference

본문

문법

RPAD( <base>, <length_expr> [, <pad>] )

반환

반환 값의 데이터 타입은 base 입력 값의 데이터 타입(VARCHAR 또는 BINARY)과 같아요.

사용 메모

  • base 인자가 length_expr보다 길면 length_expr 길이로 잘라 내요.
  • pad 인자는 여러 문자/바이트가 될 수 있어요. pad 인자는 원하는 길이(length_expr)에 도달할 때까지 결과에서 반복되며, pad 인자의 불필요한 문자/바이트는 잘라 내요. pad 인자가 비어 있으면 패딩이 삽입되지 않지만, 결과는 여전히 length_expr 길이로 잘라 내요.
  • base가 문자열이면 기본 pad 문자열은 ' '(공백 하나)예요. base가 바이너리 값이면 pad 인자를 명시적으로 제공해야 해요.

정렬 규칙 세부 사항

  • 정렬 규칙(collation)은 VARCHAR 입력에 적용돼요. 첫 번째 인자의 입력 데이터 타입이 BINARY면 정렬 규칙이 적용되지 않아요.
  • 영향 없음. 정렬 규칙이 문법적으로 받아들여지지만 정렬 규칙은 처리에 영향을 주지 않아요. 예를 들어 두 문자 또는 세 문자로 된 문자를 가진 언어(헝가리어의 "dzs", 체코어의 "ch")에서도 길이 인자에 대해 그 문자들을 두 개 또는 세 개의 문자(한 문자가 아님)로 계산해요.
  • 결과의 정렬 규칙은 입력의 정렬 규칙과 같아요. 이는 반환 값을 중첩 함수 호출의 일부로 다른 함수에 전달할 때 유용할 수 있어요.
  • 현재 Snowflake는 base와 pad 인자가 서로 다른 정렬 규칙 지정을 갖도록 허용해요. 그러나 반환 값에는 정렬 규칙 지정이 하나만 있으므로 개별 정렬 규칙 지정을 둘 다 유지할 수 없어요. Snowflake는 base 문자열과 다른 정렬 규칙을 가진 pad 문자열은 사용하지 않는 것을 권장해요.

예제

이 예제들은 RPAD 함수를 사용해 VARCHAR와 BINARY 데이터의 오른쪽을 패딩해요.

테이블을 만들고 채워요.

CREATE OR REPLACE TABLE padding_example (v VARCHAR, b BINARY);

INSERT INTO padding_example (v, b)
  SELECT
    'Hi',
    HEX_ENCODE('Hi');

INSERT INTO padding_example (v, b)
  SELECT
    '-123.00',
    HEX_ENCODE('-123.00');

INSERT INTO padding_example (v, b)
  SELECT
    'Twelve Dollars',
    TO_BINARY(HEX_ENCODE('Twelve Dollars'), 'HEX');

테이블을 조회해 데이터를 표시해요.

SELECT * FROM padding_example;
+----------------+------------------------------+
| V              | B                            |
|----------------+------------------------------|
| Hi             | 4869                         |
| -123.00        | 2D3132332E3030               |
| Twelve Dollars | 5477656C766520446F6C6C617273 |
+----------------+------------------------------+

이 예제는 RPAD 함수를 사용한 VARCHAR 값의 오른쪽 패딩을, 결과를 10자로 제한해 보여줘요.

SELECT v,
       RPAD(v, 10, '_') AS pad_with_underscore,
       RPAD(v, 10, '$') AS pad_with_dollar_sign
  FROM padding_example
  ORDER BY v;
+----------------+---------------------+----------------------+
| V              | PAD_WITH_UNDERSCORE | PAD_WITH_DOLLAR_SIGN |
|----------------+---------------------+----------------------|
| -123.00        | -123.00___          | -123.00$$$           |
| Hi             | Hi________          | Hi$$$$$$$$           |
| Twelve Dollars | Twelve Dol          | Twelve Dol           |
+----------------+---------------------+----------------------+

이 예제는 RPAD 함수를 사용한 BINARY 값의 오른쪽 패딩을, 결과를 10바이트로 제한해 보여줘요.

SELECT b,
       RPAD(b, 10, TO_BINARY(HEX_ENCODE('_'))) AS pad_with_underscore,
       RPAD(b, 10, TO_BINARY(HEX_ENCODE('$'))) AS pad_with_dollar_sign
  FROM padding_example
  ORDER BY b;
+------------------------------+----------------------+----------------------+
| B                            | PAD_WITH_UNDERSCORE  | PAD_WITH_DOLLAR_SIGN |
|------------------------------+----------------------+----------------------|
| 2D3132332E3030               | 2D3132332E30305F5F5F | 2D3132332E3030242424 |
| 4869                         | 48695F5F5F5F5F5F5F5F | 48692424242424242424 |
| 5477656C766520446F6C6C617273 | 5477656C766520446F6C | 5477656C766520446F6C |
+------------------------------+----------------------+----------------------+

이 예제는 여러 문자를 사용할 때와 패딩이 다중 문자 문자열 길이의 정확한 배수가 아닐 때의 오른쪽 패딩을 보여줘요.

SELECT RPAD('123.50', 19, '*_');
+--------------------------+
| RPAD('123.50', 19, '*_') |
|--------------------------|
| 123.50*_*_*_*_*_*_*      |
+--------------------------+

출력은 19자가 반환되었고 마지막 * 문자에 함께할 _ 문자가 없음을 보여줘요.

더 알아보기