Em algumas situações precisamos substituir um texto em um ou vários registros do nosso banco de dados, seja na listagem(SELECT) ou para uma substituição mais permanente(UPDATE) visando corrigir a base de uma URL que mudou uma palavra ou texto que deve ser exibido de forma diferente. Para fazer isso podemos utilizar uma função SQL não muito conhecida, embora muito comum e utilizada nas linguagens de programação, a REPLACE.

A função REPLACE dado um texto, ou conteúdo de uma coluna, busca uma determinada string a substituindo por outra. Esta função funciona como os métodos/funções de substituição de string de várias linguagens. Vamos a função:

REPLACE( text , find_str , replace_with )
Esquema de funcionamento da função SQL Replace
Esquema de funcionamento da função SQL Replace

É uma função bastante simples, podemos um exemplo de uso:

mysql> SELECT * FROM comentarios;
+----+----------+--------------------+-----------------------------------------------+
| id | nome     | email              | texto                                         |
+----+----------+--------------------+-----------------------------------------------+
|  1 | Maria    | maria@gmail.com    | Obrigado ajudou bastante                      |
|  2 | Anderson | anderson@gmail.com | poderia ajudar mais                           |
|  3 | Adailson | adailson@hotmail   | Vendo fusca 68, unico dono, nunca foi táxi :) |
+----+----------+--------------------+-----------------------------------------------+
3 rows in set (0.00 sec)

mysql> SELECT nome, REPLACE(email, '@' , '_em_'), texto FROM comentarios;
+----------+------------------------------+-----------------------------------------------+
| nome     | REPLACE(email, '@' , '_em_') | texto                                         |
+----------+------------------------------+-----------------------------------------------+
| Maria    | maria_em_gmail.com           | Obrigado ajudou bastante                      |
| Anderson | anderson_em_gmail.com        | poderia ajudar mais                           |
| Adailson | adailson_em_hotmail          | Vendo fusca 68, unico dono, nunca foi táxi :) |
+----------+------------------------------+-----------------------------------------------+
3 rows in set (0.00 sec)

A função REPLACE não serve só para listar, mas podemos usá-la para alterar um registro, atribuído o retorno da função novamente para o registro.

mysql> UPDATE comentarios SET email =  REPLACE(email, '@' , '_em_');
Query OK, 3 rows affected (0.15 sec)
Rows matched: 3  Changed: 3  Warnings: 0

mysql> SELECT * FROM comentarios;
+----+----------+-----------------------+-----------------------------------------------+
| id | nome     | email                 | texto                                         |
+----+----------+-----------------------+-----------------------------------------------+
|  1 | Maria    | maria_em_gmail.com    | Obrigado ajudou bastante                      |
|  2 | Anderson | anderson_em_gmail.com | poderia ajudar mais                           |
|  3 | Adailson | adailson_em_hotmail   | Vendo fusca 68, unico dono, nunca foi táxi :) |
+----+----------+-----------------------+-----------------------------------------------+
3 rows in set (0.00 sec)

Bom era isso, é uma função simples mas resolve alguns problemas. 🙂