Problém:
Chtěli byste nahradit část řetězce jiným řetězcem v MySQL.
Příklad:
Naše databáze obsahuje tabulku s názvem motorbike_sale
s údaji v id
, name
a part_number
sloupce.
id | jméno | part_number |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Rádi bychom změnili čísla dílů motorek tak, že všechny znaky pomlčky nahradíme lomítky.
Řešení 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Tento dotaz vrátí seznam názvů motocyklů a nových čísel dílů. Všimněte si lomítek, která nahradila pomlčky v číslech dílů:
name | new_part_number |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Diskuse:
Pomocí funkce MySQL REPLACE() nahradíte podřetězec (tj. slova, znak atd.) jiným podřetězcem a vrátíte změněný řetězec. Tato funkce má tři argumenty:
- Řetězec, který se má změnit. (V našem příkladu je to sloupec
part_number
.) - Podřetězec, který se má nahradit (tj. znak „-“).
- Podřetězec, který se má vložit (tj. znak „/“).
Všimněte si, že tato funkce nahrazuje vše výskyty podřetězce v daném řetězci nebo sloupci. V našem příkladu každé číslo_části obsahuje tři znaky pomlčky, z nichž každý byl nahrazen lomítkem.
V dalším příkladu nahradíme všechny výskyty „x“ v názvech motorek „10“.
Řešení 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Tento dotaz používá klauzuli WHERE k filtrování záznamů pro řádky s id hodnotu 2 nebo vyšší.
Všimněte si, že název motocyklu Honda byl změněn z „x“ na „10“, ale název motocyklu Suzuki se nezměnil. Proč ne? Protože REPLACE() rozlišuje velká a malá písmena. Proto „x“ není totéž jako „X“. V tomto příkladu bylo „x“ nahrazeno „10“, ale „X“ zůstalo nezměněno.
Tento dotaz zobrazí nový název motocyklu Honda a starý název motocyklu Suzuki.
id | new_name | part_number |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |