Problema:
Você gostaria de substituir parte de uma string por outra string no MySQL.
Exemplo:
Nosso banco de dados tem uma tabela chamada
motorbike_sale
com dados no id
, name
e part_number
colunas. id | nome | part_number |
---|---|---|
1 | Harley Davidson x | 1245-AC2-25 |
2 | Honda CB750-x | 012-GK8-A8 |
3 | Suzuki Hayabusa X | 798-25-28 |
Gostaríamos de alterar os números de peça das motocicletas substituindo todos os caracteres de hífen por barras.
Solução 1:
SELECT name, REPLACE( part_number, '-', '/' ) as new_part_number FROM motorbike_sale;
Esta consulta retorna uma lista de nomes de motos e novos números de peças. Observe as barras que substituíram os hífens nos números de peça:
nome | new_ part_number |
---|---|
Harley Davidson x | 1245/AC2/25 |
Honda CB750-x | 012/GK8/A8 |
Suzuki Hayabusa X | 798/25/28 |
Discussão:
Use a função MySQL REPLACE() para substituir uma substring (ou seja, palavras, um caractere, etc.) por outra substring e retornar a string alterada. Esta função recebe três argumentos:
- A string a ser alterada. (No nosso exemplo, é a coluna
part_number
.) - A substring a ser substituída (ou seja, o caractere '-').
- A substring a ser inserida (ou seja, o caractere '/').
Observe que esta função substitui todos ocorrências da substring na string ou coluna fornecida. Em nosso exemplo, cada part_number contém três caracteres de hífen, cada um dos quais foi substituído por uma barra.
No próximo exemplo, substituiremos todas as instâncias de 'x' em nomes de motos por '10'.
Solução 2:
SELECT id, REPLACE( name, 'x', '10' ) as new_name, part_number FROM motorbike_sale WHERE id>1;
Esta consulta usa uma cláusula WHERE para filtrar registros para linhas com um id valor de 2 ou maior.
Observe que o nome da moto Honda foi alterado de 'x' para '10', mas o nome da moto Suzuki não foi alterado. Por que não? Porque REPLACE() faz distinção entre maiúsculas e minúsculas. Portanto, 'x' não é o mesmo que 'X'. Neste exemplo, 'x' foi substituído por '10', mas 'X' permaneceu inalterado.
Esta consulta exibe o novo nome da motocicleta Honda e o nome antigo da motocicleta Suzuki.
id | novo_nome | part_number |
---|---|---|
Honda CB750-10 | 012-GK8-A8 | |
Suzuki Hayabusa X | 798-25-28 |