Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment extraire une sous-chaîne d'une chaîne dans Oracle/SQLite

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 :

e-mail
[email protected]
[email protected]
[email protected]
[email protected]

Solution 1 :

SELECT
  email,
  SUBSTR(email, 1, 7) AS substring
FROM emails;

Le résultat est :

e-mail 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 :

e-mail 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 :

e-mail 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 :

e-mail 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.