Categorias:

Funções de cadeia de caracteres e binários (General)

LPAD

Faz um preenchimento esquerdo (Left Padding) em uma cadeia de caracteres, com caracteres de outra cadeia, ou faz um preenchimento esquerdo em um valor binário, com bytes de outro valor binário.

O argumento (base) é preenchido à esquerda do comprimento length_expr com caracteres/bytes do argumento pad.

Sintaxe

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

Argumentos

base

Este deve ser um valor VARCHAR ou BINARY.

length_expr

O comprimento deve ser uma expressão que avalia como um número inteiro. Deve especificar:

  • O número de caracteres UTF-8 a retornar se a entrada for VARCHAR.

  • O número de bytes a retornar se a entrada for BINARY.

pad

Este deve ser um valor VARCHAR ou BINARY. O tipo deve corresponder ao tipo de dados do parâmetro base. Os caracteres (ou bytes) deste parâmetro são usados para preencher o base.

Retornos

O tipo de dados do valor retornado é o mesmo que o tipo de dados do valor de entrada base (BINARY ou VARCHAR).

Notas de uso

  • Se o argumento base for mais longo que length_expr, então o base é truncado no comprimento length_expr.

  • O argumento pad pode ser de múltiplos caracteres/bytes. O argumento pad é repetido no resultado até atingir a extensão desejada length_expr, truncando quaisquer caracteres/bytes supérfluos no argumento pad. Se o argumento pad estiver vazio, nenhum preenchimento é inserido, mas o resultado ainda é truncado no comprimento length_expr.

  • Quando base é uma cadeia de caracteres, o padrão da cadeia de caracteres pad é ‘ ’ (um único espaço em branco). Quando base é um valor binário, o argumento pad deve ser fornecido explicitamente.

Detalhes do agrupamento

O agrupamento se aplica às entradas VARCHAR. O agrupamento não se aplica se o tipo de dados de entrada do primeiro parâmetro for BINARY.

Embora o agrupamento seja aceito sintaticamente, os agrupamentos não têm impacto no processamento. Por exemplo, idiomas com letras de dois e três caracteres (por exemplo, «dzs» em húngaro, «ch» em tcheco) ainda contam esses como dois ou três caracteres (não um caractere) para o argumento da extensão.

The collation of the result is the same as the collation of the first input. Isso pode ser útil se o valor retornado for passado para outra função como parte de chamadas de funções aninhadas.

Atualmente, o Snowflake permite que os argumentos base e pad tenham diferentes especificadores de agrupamento. Entretanto, os especificadores de agrupamento individuais não podem ser mantidos porque o valor retornado terá apenas um especificador de agrupamento. Snowflake recomenda que os usuários evitem o uso de cadeias de caracteres pad que tenham um agrupamento diferente da cadeia de caracteres base.

Exemplos

Este exemplo mostra o preenchimento de dados VARCHAR e BINARY:

Criar e preencher uma tabela:

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

Demonstrar preenchimento de 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

Demonstrar preenchimento de 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

Este exemplo mostra o preenchimento quando múltiplos caracteres são usados e quando o preenchimento não é um múltiplo sequer do comprimento da cadeia de caracteres de preenchimento de múltiplos caracteres:

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