Problem:
Du vil gerne erstatte en del af en streng med en anden streng i MySQL.
Eksempel:
Vores database har en tabel med navnet motorbike_sale
med data i id
, name
, og part_number
kolonner.
id | navn | part_number |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Vi vil gerne ændre motorcyklernes varenumre ved at erstatte alle bindestreg med skråstreger.
Løsning 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Denne forespørgsel returnerer en liste over motorcykelnavne og nye delnumre. Læg mærke til de fremre skråstreger, der har erstattet bindestregerne i varenumrene:
navn | nyt_ varenummer |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Diskussion:
Brug funktionen MySQL REPLACE() til at erstatte en understreng (dvs. ord, et tegn osv.) med en anden understreng og returnere den ændrede streng. Denne funktion tager tre argumenter:
- Den streng, der skal ændres. (I vores eksempel er det kolonnen
part_number
.) - Den understreng, der skal erstattes (dvs. tegnet '-').
- Den understreng, der skal indsættes (dvs. tegnet '/').
Bemærk, at denne funktion erstatter alle forekomster af understrengen i den givne streng eller kolonne. I vores eksempel er hver part_number indeholder tre bindestreg, som hver er erstattet af en skråstreg.
I det næste eksempel erstatter vi alle forekomster af 'x' i motorcykelnavne med '10'.
Løsning 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Denne forespørgsel bruger en WHERE-sætning til at filtrere poster for rækker med et id værdi på 2 eller derover.
Bemærk, at Honda-motorcyklens navn blev ændret fra 'x' til '10', men Suzuki-motorcyklens navn blev ikke ændret. Hvorfor ikke? Fordi REPLACE() skelner mellem store og små bogstaver. Derfor er 'x' ikke det samme som 'X'. I dette eksempel blev 'x' erstattet af '10', men 'X' var uændret.
Denne forespørgsel viser det nye navn på Honda-motorcyklen og det gamle navn på Suzuki-motorcyklen.
id | nyt_navn | part_number |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |