Catégories :

Fonctions de chaîne et fonctions binaires (Général)

LPAD

Ajoute des caractères d’une autre chaîne à gauche d’une chaîne, ou ajoute des octets issus d’une autre valeur binaire à gauche d’une valeur binaire.

L’argument (base) est complété à gauche avec length_expr avec les caractères/octets de l’argument pad.

Voir aussi :

RPAD

Syntaxe

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

Arguments

base

Une valeur VARCHAR ou BINARY.

length_expr

Une expression qui donne un entier. Elle spécifie :

  • Le nombre de caractères UTF-8 à renvoyer si l’entrée est VARCHAR.

  • Le nombre d’octets à renvoyer si l’entrée est BINARY.

pad

Une valeur VARCHAR ou BINARY. Le type doit correspondre au type de données de l’argument base. Les caractères (ou octets) de cet argument sont utilisés pour remplir la base.

Renvoie

Le type de données de la valeur renvoyée est identique à celui de la valeur d’entrée base (VARCHAR ou BINARY).

Notes sur l’utilisation

  • Si l’argument base est plus long que length_expr, il est tronqué à la longueur length_expr.

  • L’argument pad peut comporter plusieurs caractères/octets. L’argument pad est répété dans le résultat jusqu’à ce que la longueur souhaitée (length_expr) soit atteinte, tronquant les caractères/octets superflus de l’argument pad. Si l’argument pad est vide, aucun remplissage n’est inséré, mais le résultat est toujours tronqué à la longueur length_expr.

  • Lorsque base est une chaîne, la chaîne pad par défaut est ' ' (un seul espace vide). Lorsque base est une valeur binaire, l’argument pad doit être fourni explicitement.

Détails du classement

  • Le classement s’applique aux entrées VARCHAR. Le classement ne s’applique pas si le type de données en entrée du premier argument est BINARY.

  • No impact. Bien que les classements soient acceptés syntaxiquement, ils n’ont aucune incidence sur le traitement. Par exemple, les langues avec des lettres à deux caractères et à trois caractères (par exemple « dzs » en hongrois, « ch » en tchèque) comptent toujours celles-ci comme deux ou trois caractères (pas un caractère) pour l’argument de longueur.

  • The collation of the result is the same as the collation of the input. Cela peut être utile si la valeur renvoyée est transmise à une autre fonction dans le cadre d’appels de fonctions imbriquées.

  • Actuellement, Snowflake autorise les arguments base et pad à avoir des spécificateurs de classement différents. Toutefois, les spécificateurs de classement individuels ne peuvent pas être conservés tous les deux car la valeur renvoyée n’a qu’un seul spécificateur de classement. Snowflake recommande d’éviter d’utiliser des chaînes pad dont le classement est différent de celui de la chaîne base.

Exemples

La fonction LPAD permet de remplir une chaîne avec des caractères à gauche afin que les valeurs soient conformes à un format spécifique. L’exemple suivant part du principe que les valeurs id d’une colonne doivent comporter huit caractères et être complétées par des zéros à gauche pour respecter cette norme.

Créez une table avec une colonne id et insérez des valeurs :

CREATE OR REPLACE TABLE demo_lpad_ids (id VARCHAR);

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

Exécutez une requête à l’aide de la fonction LPAD de manière à ce que les valeurs de la sortie soient conformes à la norme :

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

Les exemples supplémentaires suivants utilisent la fonction LPAD pour remplir les données VARCHAR et BINARY à gauche.

Créez et remplissez une table :

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');
Copy

Interrogez la table pour afficher les données :

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

Cet exemple illustre le remplissage à gauche des valeurs VARCHAR à l’aide de la fonction LPAD, les résultats étant limités à 10 caractères :

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

Cet exemple illustre le remplissage à gauche des valeurs BINARY à l’aide de la fonction LPAD, les résultats étant limités à 10 octets :

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

Cet exemple montre le remplissage à gauche lorsque plusieurs caractères sont utilisés et que le remplissage n’est pas un multiple de la longueur de la chaîne de remplissage à plusieurs caractères :

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

La sortie montre que 19 caractères ont été renvoyés, et que le dernier caractère * n’est pas accompagné d’un caractère _.