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

Comment remplacer une partie d'une chaîne dans MySQL

Problème :

Vous souhaitez remplacer une partie d'une chaîne par une autre chaîne dans MySQL.

Exemple :

Notre base de données a une table nommée motorbike_sale avec des données dans le id , name , et part_number colonnes.

identifiant nom part_number
1 Harley Davidson x 1245-AC2-25
2 Honda CB750-x 012-GK8-A8
3 Suzuki Hayabusa X 798-25-28

Nous aimerions changer les références des motos en remplaçant tous les traits d'union par des barres obliques.

Solution 1 :

SELECT name,
  REPLACE( part_number, '-', '/' ) as new_part_number
FROM motorbike_sale;

Cette requête renvoie une liste de noms de motos et de nouveaux numéros de pièces. Remarquez les barres obliques qui ont remplacé les tirets dans les références :

nom nouveau_numéro_de_pièce
Harley Davidson x 1245/AC2/25
Honda CB750-x 012/GK8/A8
Suzuki Hayabusa X 798/25/28

Discussion :

Utilisez la fonction MySQL REPLACE() pour remplacer une sous-chaîne (c'est-à-dire des mots, un caractère, etc.) par une autre sous-chaîne et renvoyer la chaîne modifiée. Cette fonction prend trois arguments :

  • La chaîne à modifier. (Dans notre exemple, il s'agit de la colonne part_number .)
  • La sous-chaîne à remplacer (c'est-à-dire le caractère "-").
  • La sous-chaîne à insérer (c'est-à-dire le caractère "/").

Notez que cette fonction remplace tous occurrences de la sous-chaîne dans la chaîne ou la colonne donnée. Dans notre exemple, chaque part_number contient trois traits d'union, chacun ayant été remplacé par une barre oblique.

Dans l'exemple suivant, nous remplacerons toutes les occurrences de "x" dans les noms de motos par "10".

Solution 2 :

SELECT id,
  REPLACE( name, 'x', '10' ) as new_name,
  part_number
FROM motorbike_sale
WHERE id>1;

Cette requête utilise une clause WHERE pour filtrer les enregistrements des lignes avec un id valeur de 2 ou plus.

Notez que le nom de la moto Honda a été changé de "x" à "10", mais le nom de la moto Suzuki n'a pas été changé. Pourquoi pas? Parce que REPLACE() est sensible à la casse. Par conséquent, « x » n'est pas identique à « X ». Dans cet exemple, « x » a été remplacé par « 10 », mais « X » est resté inchangé.

Cette requête affiche le nouveau nom de la moto Honda et l'ancien nom de la moto Suzuki.

identifiant nouveau_nom part_number
Honda CB750-10 012-GK8-A8
Suzuki Hayabusa X 798-25-28