Problem:
Sie möchten einen Teil einer Zeichenfolge in MySQL durch eine andere Zeichenfolge ersetzen.
Beispiel:
Unsere Datenbank hat eine Tabelle namens motorbike_sale mit Daten in der id , name , und part_number Spalten.
| id | Name | Teilenummer |
|---|---|---|
| 1 | Harley Davidson x | 1245-AC2-25 |
| 2 | Honda CB750-x | 012-GK8-A8 |
| 3 | Suzuki Hayabusa X | 798-25-28 |
Wir möchten die Teilenummern der Motorräder ändern, indem wir alle Bindestriche durch Schrägstriche ersetzen.
Lösung 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Diese Abfrage gibt eine Liste mit Motorradnamen und neuen Teilenummern zurück. Beachten Sie die Schrägstriche, die die Bindestriche in den Teilenummern ersetzt haben:
| name | neue_ Teilenummer |
|---|---|
| Harley Davidson x | 1245/AC2/25 |
| Honda CB750-x | 012/GK8/A8 |
| Suzuki Hayabusa X | 798/25/28 |
Diskussion:
Verwenden Sie die MySQL-Funktion REPLACE(), um einen Teilstring (d. h. Wörter, ein Zeichen usw.) durch einen anderen Teilstring zu ersetzen und den geänderten String zurückzugeben. Diese Funktion benötigt drei Argumente:
- Die zu ändernde Zeichenfolge. (In unserem Beispiel ist es die Spalte
part_number.) - Die zu ersetzende Teilzeichenfolge (d. h. das Zeichen „-“).
- Die einzufügende Teilzeichenfolge (d. h. das Zeichen „/“).
Beachten Sie, dass diese Funktion all ersetzt Vorkommen der Teilzeichenfolge in der angegebenen Zeichenfolge oder Spalte. In unserem Beispiel jede part_number enthält drei Bindestriche, von denen jeder durch einen Schrägstrich ersetzt wurde.
Im nächsten Beispiel ersetzen wir alle Instanzen von „x“ in Motorradnamen durch „10“.
Lösung 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Diese Abfrage verwendet eine WHERE-Klausel, um Datensätze nach Zeilen mit einer id zu filtern Wert von 2 oder höher.
Beachten Sie, dass der Name des Honda-Motorrads von „x“ in „10“ geändert wurde, aber der Name des Suzuki-Motorrads wurde nicht geändert. Warum nicht? Weil REPLACE() zwischen Groß- und Kleinschreibung unterscheidet. Daher ist „x“ nicht dasselbe wie „X“. In diesem Beispiel wurde „x“ durch „10“ ersetzt, aber „X“ blieb unverändert.
Diese Abfrage zeigt den neuen Namen des Honda-Motorrads und den alten Namen des Suzuki-Motorrads an.
| id | neuer_name | Teilenummer |
|---|---|---|
| Honda CB750-10 | 012-GK8-A8 | |
| Suzuki Hayabusa X | 798-25-28 |