LPAD

LPAD (왼쪽 패딩)

다른 문자열의 문자로 문자열을 왼쪽 패딩하거나, 다른 바이너리 값의 바이트로 바이너리 값을 왼쪽 패딩해요.

출처: Snowflake SQL Reference - LPAD

본문

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

참고: RPAD

구문

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

인자

base

VARCHAR 또는 BINARY 값이에요.

length_expr

정수로 평가되는 표현식이에요. 다음을 지정해요.

  • 입력이 VARCHAR이면 반환할 UTF-8 문자 수.

  • 입력이 BINARY이면 반환할 바이트 수.

pad

VARCHAR 또는 BINARY 값이에요. 타입은 base 인자의 데이터 타입과 일치해야 해요. 이 인자의 문자(또는 바이트)가 base를 패딩하는 데 사용돼요.

반환 값

반환 값의 데이터 타입은 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 문자열을 사용하지 말 것을 권장해요.

예시

LPAD 함수는 값이 특정 형식을 따르도록 왼쪽에 문자를 패딩할 수 있어요. 다음 예시는 열의 id 값이 8자 길이여야 하고 이 기준을 맞추기 위해 왼쪽에 0으로 패딩돼야 한다고 가정해요.

id 열이 있는 테이블을 만들고 값을 삽입해요.

CREATE OR REPLACE TABLE demo_lpad_ids (id VARCHAR);

INSERT INTO demo_lpad_ids VALUES
 ('5'),
 ('50'),
 ('500');

출력의 값이 기준을 맞추도록 LPAD 함수를 사용해 쿼리를 실행해요.

SELECT id, LPAD(id, 8, '0') AS padded_ids
 FROM demo_lpad_ids;
+-----+------------+
| ID  | PADDED_IDS |
|-----+------------|
| 5   | 00000005   |
| 50  | 00000050   |
| 500 | 00000500   |
+-----+------------+

다음의 추가 예시들은 LPAD 함수를 사용해 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 |
+----------------+------------------------------+

이 예시는 LPAD 함수를 사용한 VARCHAR 값의 왼쪽 패딩을 보여주며, 결과는 10자로 제한돼요.

SELECT v,
 LPAD(v, 10, ' ') AS pad_with_blank,
 LPAD(v, 10, '$') AS pad_with_dollar_sign
 FROM padding_example
 ORDER BY v;
+----------------+----------------+----------------------+
| V              | PAD_WITH_BLANK | PAD_WITH_DOLLAR_SIGN |
|----------------+----------------+----------------------|
| -123.00        |      -123.00   | $$$-123.00           |
| Hi             |             Hi | $$$$$$$$Hi           |
| Twelve Dollars | Twelve Dol     | Twelve Dol           |
+----------------+----------------+----------------------+

이 예시는 LPAD 함수를 사용한 BINARY 값의 왼쪽 패딩을 보여주며, 결과는 10바이트로 제한돼요.

SELECT b,
 LPAD(b, 10, TO_BINARY(HEX_ENCODE(' '))) AS pad_with_blank,
 LPAD(b, 10, TO_BINARY(HEX_ENCODE('$'))) AS pad_with_dollar_sign
 FROM padding_example
 ORDER BY b;
+------------------------------+----------------------+----------------------+
| B                            | PAD_WITH_BLANK       | PAD_WITH_DOLLAR_SIGN |
|------------------------------+----------------------+----------------------|
| 2D3132332E3030               | 2020202D3132332E3030 | 2424242D3132332E3030 |
| 4869                         | 20202020202020204869 | 24242424242424244869 |
| 5477656C766520446F6C6C617273 | 5477656C766520446F6C | 5477656C766520446F6C |
+------------------------------+----------------------+----------------------+

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

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

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

더 알아보기