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 |