Problem:
Du vill ersätta en del av en sträng med en annan sträng i MySQL.
Exempel:
Vår databas har en tabell som heter motorbike_sale
med data i id
, name
och part_number
kolumner.
id | namn | part_number |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Vi skulle vilja ändra motorcyklarnas artikelnummer genom att ersätta alla bindestreck med snedstreck.
Lösning 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Denna fråga returnerar en lista med motorcykelnamn och nya artikelnummer. Lägg märke till de framåtgående snedstreck som har ersatt bindestreck i artikelnumren:
namn | nytt_delnummer |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Diskussion:
Använd funktionen MySQL REPLACE() för att ersätta en delsträng (dvs. ord, ett tecken, etc.) med en annan delsträng och returnera den ändrade strängen. Denna funktion tar tre argument:
- Strängen som ska ändras. (I vårt exempel är det kolumnen
part_number
.) - Den delsträng som ska ersättas (dvs tecknet "-").
- Den delsträng som ska infogas (dvs tecknet '/').
Observera att den här funktionen ersätter alla förekomster av delsträngen i den givna strängen eller kolumnen. I vårt exempel, varje part_number innehåller tre bindestreck, som var och en har ersatts av ett snedstreck.
I nästa exempel kommer vi att ersätta alla instanser av 'x' i motorcykelnamn med '10'.
Lösning 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Den här frågan använder en WHERE-sats för att filtrera poster för rader med ett id värde på 2 eller högre.
Lägg märke till att Honda-motorcykelns namn ändrades från "x" till "10", men Suzuki-motorcykelns namn ändrades inte. Varför inte? Eftersom REPLACE() är skiftlägeskänsligt. Därför är 'x' inte detsamma som 'X'. I det här exemplet ersattes 'x' med '10', men 'X' var oförändrad.
Den här frågan visar det nya namnet på Honda-motorcykeln och det gamla namnet på Suzuki-motorcykeln.
id | nytt_namn | part_number |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |