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

Comment extraire une sous-chaîne d'une chaîne dans PostgreSQL/MySQL

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 :

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

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

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

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