Probleem:
U wilt een deel van een tekenreeks vervangen door een andere tekenreeks in MySQL.
Voorbeeld:
Onze database heeft een tabel met de naam motorbike_sale
met gegevens in de id
, name
, en part_number
kolommen.
id | naam | part_number |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
We willen de onderdeelnummers van de motorfietsen wijzigen door alle koppeltekens te vervangen door schuine strepen.
Oplossing 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Deze zoekopdracht retourneert een lijst met motornamen en nieuwe onderdeelnummers. Let op de schuine strepen die de koppeltekens in de onderdeelnummers hebben vervangen:
naam | new_ part_number |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Discussie:
Gebruik de functie MySQL REPLACE() om een subtekenreeks (d.w.z. woorden, een teken, enz.) te vervangen door een andere subtekenreeks en de gewijzigde tekenreeks terug te geven. Deze functie heeft drie argumenten:
- De tekenreeks die moet worden gewijzigd. (In ons voorbeeld is dit de kolom
part_number
.) - De subtekenreeks die moet worden vervangen (d.w.z. het teken '-').
- De subtekenreeks die moet worden ingevoegd (d.w.z. het teken '/').
Merk op dat deze functie alle . vervangt voorkomens van de subtekenreeks in de gegeven tekenreeks of kolom. In ons voorbeeld heeft elk part_number bevat drie koppeltekens, die elk zijn vervangen door een schuine streep.
In het volgende voorbeeld vervangen we alle instanties van 'x' in motornamen door '10'.
Oplossing 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Deze query gebruikt een WHERE-component om records te filteren voor rijen met een id waarde van 2 of hoger.
Merk op dat de naam van de Honda-motorfiets is gewijzigd van 'x' in '10', maar de naam van de Suzuki-motorfiets niet. Waarom niet? Omdat REPLACE() hoofdlettergevoelig is. Daarom is 'x' niet hetzelfde als 'X'. In dit voorbeeld is 'x' vervangen door '10', maar is 'X' ongewijzigd gebleven.
Deze zoekopdracht toont de nieuwe naam van de Honda-motor en de oude naam van de Suzuki-motor.
id | nieuwe_naam | part_number |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |