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 |