Catégories :

Fonctions de chaîne et fonctions binaires (Correspondance/Comparaison)

LEFT

Renvoie une sous-chaîne située le plus à gauche de son entrée.

LEFT(STR, N) équivaut à SUBSTR(STR, 1, N).

Voir aussi ::

RIGHT, SUBSTR , SUBSTRING

Syntaxe

LEFT( <string_expr> , <length_expr> )
Copy

Arguments

string_expr

Une expression qui est évaluée sur 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 une valeur VARCHAR.

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

Spécifiez une longueur supérieure ou égale à zéro. Si la longueur est un nombre négatif, la fonction renvoie une chaîne vide.

Renvoie

Le type de données de la valeur renvoyée est identique à celui du type de données de string_expr (VARCHAR ou BINARY).

Si l’une des entrées est NULL, NULL est renvoyé.

Notes sur l’utilisation

Si length_expr est supérieure à la longueur expr, alors la fonction renvoie expr.

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 paramètre est BINARY.

  • No impact. Bien que le classement soit accepté syntaxiquement, les classements n’affectent pas le traitement. Par exemple, les lettres à deux et trois caractères dans les langues (par exemple, « dzs » en hongrois ou « ch » en tchèque) sont toujours comptées comme deux ou trois caractères (et non comme un seul 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.

Exemples

Les exemples suivants utilisent la fonction LEFT.

Exemple de base

SELECT LEFT('ABCDEF', 3);
Copy
+-------------------+
| LEFT('ABCDEF', 3) |
|-------------------|
| ABC               |
+-------------------+

Renvoyer des sous-chaînes pour les chaînes d’e-mail, de téléphone et de date

Les exemples suivants renvoient des sous-chaînes d’informations clientes dans une table.

Créez la table et insérez les données :

CREATE OR REPLACE TABLE customer_contact_example (
    cust_id INT,
    cust_email VARCHAR,
    cust_phone VARCHAR,
    activation_date VARCHAR)
  AS SELECT
    column1,
    column2,
    column3,
    column4
  FROM
    VALUES
      (1, 'some_text@example.com', '800-555-0100', '20210320'),
      (2, 'some_other_text@example.org', '800-555-0101', '20240509'),
      (3, 'some_different_text@example.net', '800-555-0102', '20191017');

SELECT * from customer_contact_example;
Copy
+---------+---------------------------------+--------------+-----------------+
| CUST_ID | CUST_EMAIL                      | CUST_PHONE   | ACTIVATION_DATE |
|---------+---------------------------------+--------------+-----------------|
|       1 | some_text@example.com           | 800-555-0100 | 20210320        |
|       2 | some_other_text@example.org     | 800-555-0101 | 20240509        |
|       3 | some_different_text@example.net | 800-555-0102 | 20191017        |
+---------+---------------------------------+--------------+-----------------+

Utilisez la fonction POSITION avec la fonction LEFT pour extraire le nom d’utilisateur à partir des adresses e-mail. Cet exemple trouve la position de @ dans chaque chaîne et soustrait un pour renvoyer le nom d’utilisateur :

SELECT cust_id,
       cust_email,
       LEFT(cust_email, POSITION('@' IN cust_email) - 1) AS username
  FROM customer_contact_example;
Copy
+---------+---------------------------------+---------------------+
| CUST_ID | CUST_EMAIL                      | USERNAME            |
|---------+---------------------------------+---------------------|
|       1 | some_text@example.com           | some_text           |
|       2 | some_other_text@example.org     | some_other_text     |
|       3 | some_different_text@example.net | some_different_text |
+---------+---------------------------------+---------------------+

Astuce

Vous pouvez utiliser la fonction POSITION permettant de trouver la position d’autres caractères, comme un caractère vide (' ') ou un trait de soulignement (_).

Dans la colonne cust_phone de la table, l’indicatif régional correspond toujours aux trois premiers caractères. Extrayez l’indicatif régional des numéros de téléphone :

SELECT cust_id,
       cust_phone,
       LEFT(cust_phone, 3) AS area_code
  FROM customer_contact_example;
Copy
+---------+--------------+-----------+
| CUST_ID | CUST_PHONE   | AREA_CODE |
|---------+--------------+-----------|
|       1 | 800-555-0100 | 800       |
|       2 | 800-555-0101 | 800       |
|       3 | 800-555-0102 | 800       |
+---------+--------------+-----------+

Dans la colonne activation_date de la table, la date est toujours au format YYYYMMDD. Extrayez l’année de ces chaînes :

SELECT cust_id,
       activation_date,
       LEFT(activation_date, 4) AS year
  FROM customer_contact_example;
Copy
+---------+-----------------+------+
| CUST_ID | ACTIVATION_DATE | YEAR |
|---------+-----------------+------|
|       1 | 20210320        | 2021 |
|       2 | 20240509        | 2024 |
|       3 | 20191017        | 2019 |
+---------+-----------------+------+