카테고리:

문자열 및 이진 함수 (일반)

LPAD

다른 문자열의 문자로 문자열을 왼쪽에 채우거나 다른 이진 값의 바이트로 이진 값을 왼쪽에 채웁니다.

인자(base)는 length_expr 인자의 문자/바이트와 함께 pad 길이로 왼쪽에 채워집니다.

구문

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

인자

base

이는 VARCHAR 또는 BINARY 값이어야 합니다.

length_expr

길이는 정수로 평가되는 식이어야 합니다. 다음을 지정해야 합니다.

  • 입력이 VARCHAR 인 경우 반환할 UTF-8 문자 수입니다.

  • 입력이 BINARY 인 경우 반환할 바이트 수입니다.

pad

이는 VARCHAR 또는 BINARY 값이어야 합니다. 타입은 base 매개 변수의 데이터 타입과 일치해야 합니다. 이 매개 변수의 문자(또는 바이트)는 base 을 채우는 데 사용됩니다.

반환

반환된 값의 데이터 타입은 base 입력 값(BINARY 또는 VARCHAR)의 데이터 타입과 동일합니다.

사용법 노트

  • base 인자가 length_expr 보다 길면 baselength_expr 길이로 잘립니다.

  • pad 인자는 여러 문자/바이트 길이일 수 있습니다. pad 인자는 원하는 length_expr 길이에 도달할 때까지 결과에서 반복되어, pad 인자에서 불필요한 문자/바이트를 자릅니다. pad 인자가 비어 있으면 패딩이 삽입되지 않지만, 결과는 여전히 length_expr 길이로 잘립니다.

  • base 가 문자열인 경우, 기본 pad 문자열 기본값은 〈 〈(단일 공백)입니다. base 가 이진 값이면 pad 인자를 명시적으로 제공해야 합니다.

데이터 정렬 세부 정보

데이터 정렬은 VARCHAR 입력에 적용됩니다. 첫 번째 매개 변수의 입력 데이터 타입이 BINARY 인 경우 데이터 정렬이 적용되지 않습니다.

데이터 정렬이 구문적으로 허용되지만, 데이터 정렬은 처리에 영향을 주지 않습니다. 예를 들어, 2자 및 3자 문자가 있는 언어(예: 헝가리어의 《dzs》, 체코어의 《ch》)는 여전히 길이 인자에 대해 두 개 또는 세 개의 문자(한 문자가 아님)로 계산합니다.

The collation of the result is the same as the collation of the first input. 이는 반환된 값이 중첩 함수 호출의 일부로서 다른 함수에 전달되는 경우에 유용할 수 있습니다.

현재, Snowflake에서는 base 인자와 pad 인자가 서로 다른 데이터 정렬 지정자를 가질 수 있습니다. 그러나 반환된 값에는 데이터 정렬 지정자가 하나만 있기 때문에 개별 데이터 정렬 지정자를 둘 다 유지할 수는 없습니다. Snowflake는 사용자가 pad 문자열과는 데이터 정렬이 다른 base 문자열을 사용하지 않을 것을 권장합니다.

이 예는 VARCHARBINARY 데이터의 패딩을 보여줍니다.

테이블을 만들고 채웁니다.

CREATE TABLE demo (v VARCHAR, b BINARY);
INSERT INTO demo (v, b) SELECT 'Hi', HEX_ENCODE('Hi');
INSERT INTO demo (v, b) SELECT '-123.00', HEX_ENCODE('-123.00');
INSERT INTO demo (v, b) SELECT 'Twelve Dollars', 
  TO_BINARY(HEX_ENCODE('Twelve Dollars'), 'HEX');
Copy

VARCHAR 패딩을 보여줍니다.

SELECT v, LPAD(v, 10, ' '),             
          LPAD(v, 10, '$')
    FROM demo
    ORDER BY v;
+----------------+------------------+------------------+
| V              | LPAD(V, 10, ' ') | LPAD(V, 10, '$') |
|----------------+------------------+------------------|
| -123.00        |    -123.00       | $$$-123.00       |
| Hi             |         Hi       | $$$$$$$$Hi       |
| Twelve Dollars | Twelve Dol       | Twelve Dol       |
+----------------+------------------+------------------+
Copy

BINARY 패딩을 보여줍니다.

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 demo
    ORDER BY b;
+------------------------------+----------------------+----------------------+
| B                            | PAD_WITH_BLANK       | PAD_WITH_DOLLAR_SIGN |
|------------------------------+----------------------+----------------------|
| 2D3132332E3030               | 2020202D3132332E3030 | 2424242D3132332E3030 |
| 4869                         | 20202020202020204869 | 24242424242424244869 |
| 5477656C766520446F6C6C617273 | 5477656C766520446F6C | 5477656C766520446F6C |
+------------------------------+----------------------+----------------------+
Copy

이 예는 여러 문자가 사용되는 경우 및 패딩이 다중 문자 패딩 문자열 길이의 짝수 배수가 아닌 경우의 패딩을 보여줍니다.

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