Problème :
Comment extraire une sous-chaîne d'une chaîne dans PostgreSQL/MySQL
Exemple 1 :
Dans les emails
table, il y a une colonne email. Vous souhaitez afficher les sept premiers caractères de chaque e-mail.
Le tableau ressemble à ceci :
[email protected] |
[email protected] |
[email protected] |
[email protected] |
Solution 1 :
SELECT email, SUBSTRING(email, 1, 7) AS substring FROM emails;
Autre syntaxe :
SELECT email, SUBSTRING(email FROM 1 FOR 7) AS substring FROM emails;
Le résultat est :
sous-chaîne | |
---|---|
[email protected] | jake99@ |
[email protected] | tamarab |
[email protected] | noter@ |
[email protected] | jessica |
Discussion :
Utilisez le SUBSTRING()
une fonction. Le premier argument est la chaîne ou le nom de la colonne. Le deuxième argument est l'index du caractère auquel la sous-chaîne doit commencer. Le troisième argument est la longueur de la sous-chaîne.
Fais attention! Contrairement à certains autres langages de programmation, les index commencent à 1 , pas 0. Cela signifie que le premier caractère a l'index 1, le deuxième caractère a l'index 2, etc.
SUBSTRING(email, 1, 7)
renverra les sous-chaînes des valeurs de la colonne e-mail qui commencent au début des chaînes (premier caractère) et vont jusqu'à sept caractères. L'autre notation, SUBSTRING(email FROM 1 FOR 7)
, fait exactement la même chose. L'argument après le FROM
est l'index de départ, et l'argument après le FOR
est la longueur de la sous-chaîne.
Le troisième argument du SUBSTRING()
fonction est facultative. Si vous l'omettez, vous obtiendrez la sous-chaîne qui commence à l'index dans le deuxième argument et va jusqu'à la fin de la chaîne. SUBSTRING(email, 1)
renverra la chaîne entière, tout comme SUBSTRING(email FROM 1)
.
Exemple 2 :
Vous souhaitez afficher la sous-chaîne entre les index 2 et 6 (inclus).
Solution 2 :
SELECT email, SUBSTRING(email, 2, 5) AS substring FROM emails;
Autre syntaxe :
SELECT email, SUBSTRING(email FROM POSITION('@' IN email)) AS substring FROM emails;
Le résultat est :
sous-chaîne | |
---|---|
[email protected] | @gmail.com |
[email protected] | @zoho.com |
[email protected] | @yahoo.fr |
[email protected] | @onet.pl |
Discussion :
Vous utilisez le SUBSTRING()
fonctionnent comme dans les exemples précédents. Cette fois, vous recherchez un personnage spécifique dont la position peut varier d'une ligne à l'autre. Pour trouver l'index du caractère spécifique, vous pouvez utiliser le POSITION(character IN column)
fonction, où caractère est le caractère spécifique auquel vous souhaitez commencer la sous-chaîne (ici, @
). La colonne d'argument est la column
dont vous souhaitez récupérer la sous-chaîne ; il peut également s'agir d'une chaîne littérale.
Si vous voulez que la sous-chaîne aille jusqu'à la fin de la chaîne d'origine, le troisième argument de SUBSTRING()
fonction (ou la fonction FOR
argument) n'est pas nécessaire. Sinon, ce devrait être la longueur de la sous-chaîne, ou vous pouvez la calculer en utilisant le POSITION()
une fonction. Vous pouvez également vouloir récupérer une sous-chaîne qui ne se termine pas à la fin de la chaîne mais à un caractère spécifique, par exemple, avant '.'. Voici un exemple :
SELECT email, SUBSTRING(email, POSITION('@' IN email), POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Autre syntaxe :
SELECT email, SUBSTRING(email FROM POSITION('@' IN email) FOR POSITION('.' IN email) - POSITION('@' IN email)) AS substring FROM emails;
Le résultat de cette requête est :
sous-chaîne | |
---|---|
[email protected] | @gmail |
[email protected] | @zoho |
[email protected] | @yahoo |
[email protected] | @onet |
La partie POSITION('.' IN email) - POSITION('@' IN email)
calcule simplement la longueur de la sous-chaîne.