- Catégories :
Fonctions de chaîne et fonctions binaires (Correspondance/Comparaison)
RIGHT¶
Renvoie une sous-chaîne située le plus à droite de son entrée.
RIGHT(STR, N)
est équivalent à SUBSTR(STR, LENGTH(STR)-N+1, N)
.
- Voir aussi ::
Syntaxe¶
RIGHT( <string_expr> , <length_expr> )
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 RIGHT.
Exemple de base¶
SELECT RIGHT('ABCDEFG', 3);
+---------------------+
| RIGHT('ABCDEFG', 3) |
|---------------------|
| EFG |
+---------------------+
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;
+---------+---------------------------------+--------------+-----------------+
| 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 les fonctions LENGTH et POSITION avec la fonction RIGHT permettant d’extraire les domaines à partir des adresses e-mail. Cet exemple recherche d’abord la longueur de la chaîne d’entrée, puis soustrait la position de @
dans chaque chaîne pour déterminer la longueur du domaine :
SELECT cust_id,
cust_email,
RIGHT(cust_email, LENGTH(cust_email) - (POSITION('@' IN cust_email))) AS domain
FROM customer_contact_example;
+---------+---------------------------------+-------------+
| CUST_ID | CUST_EMAIL | DOMAIN |
|---------+---------------------------------+-------------|
| 1 | some_text@example.com | example.com |
| 2 | some_other_text@example.org | example.org |
| 3 | some_different_text@example.net | example.net |
+---------+---------------------------------+-------------+
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. Extraire les numéros de téléphone sans les indicatifs régionaux :
SELECT cust_id,
cust_phone,
RIGHT(cust_phone, 8) AS phone_without_area_code
FROM customer_contact_example;
+---------+--------------+-------------------------+
| CUST_ID | CUST_PHONE | PHONE_WITHOUT_AREA_CODE |
|---------+--------------+-------------------------|
| 1 | 800-555-0100 | 555-0100 |
| 2 | 800-555-0101 | 555-0101 |
| 3 | 800-555-0102 | 555-0102 |
+---------+--------------+-------------------------+
Dans la colonne activation_date
de la table, la date est toujours au format YYYYMMDD
. Extraire le jour de ces chaînes :
SELECT cust_id,
activation_date,
RIGHT(activation_date, 2) AS day
FROM customer_contact_example;
+---------+-----------------+-----+
| CUST_ID | ACTIVATION_DATE | DAY |
|---------+-----------------+-----|
| 1 | 20210320 | 20 |
| 2 | 20240509 | 09 |
| 3 | 20191017 | 17 |
+---------+-----------------+-----+