Mysql
 sql >> Database >  >> RDS >> Mysql

Come sostituire parte di una stringa in MySQL

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