Problema:
Vorresti sostituire parte di una stringa con un'altra stringa in MySQL.
Esempio:
Il nostro database ha una tabella denominata motorbike_sale
con i dati nel id
, name
e part_number
colonne.
id | numero_parte | |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Vorremmo cambiare i codici delle moto sostituendo tutti i trattini con barre in avanti.
Soluzione 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Questa query restituisce un elenco di nomi di motociclette e nuovi numeri di parte. Notare le barre in avanti che hanno sostituito i trattini nei numeri di parte:
nome | nuovo_ numero_parte |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Discussione:
Utilizzare la funzione MySQL REPLACE() per sostituire una sottostringa (cioè parole, un carattere, ecc.) con un'altra sottostringa e restituire la stringa modificata. Questa funzione accetta tre argomenti:
- La stringa da modificare. (Nel nostro esempio, è la colonna
part_number
.) - La sottostringa da sostituire (ovvero il carattere '-').
- La sottostringa da inserire (ovvero il carattere '/').
Nota che questa funzione sostituisce tutti occorrenze della sottostringa nella stringa o colonna data. Nel nostro esempio, ogni numero_parte contiene tre trattini, ognuno dei quali è stato sostituito da una barra.
Nel prossimo esempio sostituiremo tutte le istanze di "x" nei nomi delle moto con "10".
Soluzione 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Questa query utilizza una clausola WHERE per filtrare i record per le righe con un id valore di 2 o superiore.
Si noti che il nome della moto Honda è stato cambiato da "x" a "10", ma il nome della moto Suzuki non è stato cambiato. Perchè no? Perché REPLACE() fa distinzione tra maiuscole e minuscole. Pertanto, "x" non è la stessa cosa di "X". In questo esempio, "x" è stato sostituito da "10", ma "X" è rimasto invariato.
Questa query mostra il nuovo nome della moto Honda e il vecchio nome della moto Suzuki.
id | nuovo_nome | numero_parte |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |