Problem:
Chcesz zastąpić część ciągu innym ciągiem w MySQL.
Przykład:
Nasza baza danych zawiera tabelę o nazwie motorbike_sale
z danymi w id
, name
i part_number
kolumny.
id | imię | numer części |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Chcielibyśmy zmienić numery części motocykli, zastępując wszystkie znaki łączników ukośnikami.
Rozwiązanie 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
To zapytanie zwraca listę nazw motocykli i nowych numerów części. Zwróć uwagę na ukośniki, które zastąpiły łączniki w numerach części:
nazwa | nowy_ numer_części |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Dyskusja:
Użyj funkcji MySQL REPLACE(), aby zastąpić podciąg (tj. słowa, znak itp.) innym podciągiem i zwrócić zmieniony ciąg. Ta funkcja przyjmuje trzy argumenty:
- Ciąg do zmiany. (W naszym przykładzie jest to kolumna
part_number
.) - Podciąg do zastąpienia (np. znak „-”).
- Podciąg do wstawienia (np. znak „/”).
Zauważ, że ta funkcja zastępuje wszystkie wystąpienia podciągu w podanym ciągu lub kolumnie. W naszym przykładzie każdy numer_części zawiera trzy znaki łącznika, z których każdy został zastąpiony ukośnikiem.
W następnym przykładzie zastąpimy wszystkie wystąpienia „x” w nazwach motocykli na „10”.
Rozwiązanie 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
To zapytanie używa klauzuli WHERE do filtrowania rekordów dla wierszy z id wartość 2 lub większa.
Zauważ, że nazwa motocykla Honda została zmieniona z „x” na „10”, ale nazwa motocykla Suzuki nie została zmieniona. Dlaczego nie? Ponieważ REPLACE() rozróżnia wielkość liter. Dlatego „x” to nie to samo co „X”. W tym przykładzie „x” zostało zastąpione przez „10”, ale „X” pozostało niezmienione.
To zapytanie wyświetla nową nazwę motocykla Honda i starą nazwę motocykla Suzuki.
id | nowa_nazwa | numer części |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |