Problème :
Vous avez une colonne de chaînes et vous aimeriez en obtenir des sous-chaînes.
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, SUBSTR(email, 1, 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 :
Utiliser un SUBSTR()
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.
>SUBSTR(email, 1, 7) renverra les sous-chaînes des valeurs de la colonne e-mail qui commencent au premier caractère et vont jusqu'à sept caractères.
Exemple 2 :
Vous souhaitez afficher la sous-chaîne entre les index 2 et 6 (inclus).
Solution 2 :
SELECT email, SUBSTR(email, 2, 5) AS substring FROM emails;
Le résultat est :
sous-chaîne | |
---|---|
[email protected] | ake99 |
[email protected] | amara |
[email protected] | noter |
[email protected] | essic |
Discussion :
Vous utilisez le SUBSTR()
fonctionner comme dans l'exemple précédent. Cette fois, le deuxième argument de la fonction est 2, puisque nous voulons commencer à l'index 2. La longueur de la sous-chaîne est 5 (end_index - start_index + 1
).
Exemple 3 :
Vous souhaitez afficher la sous-chaîne qui commence au signe @ et se termine à la fin de la chaîne, mais vous ne connaissez pas les index ou les longueurs exacts.
Solution 3 :
SELECT email, SUBSTR(email, INSTR(email, '@'), LENGTH(email) - INSTR(email, '@') + 1) 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 SUBSTR()
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 INSTR(column, character)
fonction, où colonne est la chaîne littérale ou la colonne à partir de laquelle vous souhaitez récupérer la sous-chaîne, et caractère est le character
à laquelle vous souhaitez commencer la sous-chaîne (ici, @
).
Le troisième argument de SUBSTR()
fonction est la longueur de la sous-chaîne. Vous pouvez le calculer en utilisant le INSTR()
et la LENGTH()
les fonctions. Pour ce faire, soustrayez l'index de la longueur de la colonne, puis ajoutez 1 :
LENGTH(email) - INSTR(email, '@') + 1
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 comment procéder :
SELECT email, SUBSTR(email, INSTR(email, '@'), INSTR(email, '.') - INSTR(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 INSTR(email, '.') - INSTR(email, '@')
calcule simplement la longueur de la sous-chaîne.