LPAD
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자가 반환되었고, 마지막 * 문자에는 함께 붙는 _ 문자가 없음을 보여줘요.