Como decompor ou combinar strings no MySQL

Saiba como quebrar ou separar partes de uma cadeia de caracteres para obter uma substring ou como combinar mais de uma string para obter uma cadeia maior.
Partes deste assunto, já foram abordadas em outros artigos no site — portanto, se quiser saber um pouco mais sobre algum quesito, clique nos links correspondentes, ao longo do texto.
Outumn trees over lake and mysql logo
A solução para separar trechos de uma cadeia de caracteres é usar uma função de extração de substrings.
Para obter o efeito contrário, use a função CONCAT(). Com esta função, é possível juntar cadeias de caracteres e criar novas formatações para diversos tipos de dados.

Funções para extração de caracteres ou strings no MySQL

A versão 5.7 do MySqL tem mais de 50 funções para lidar com strings.
Ao aprender a lidar com algumas, você estará apto(a) a lidar com todas.
Nos primeiros exemplos deste post, vou mostrar o funcionamento de 3, destas funções: LEFT(), MID() e RIGHT().
Elas servem para extrair substrings de uma cadeia de caracteres da parte à esquerda, do meio e da direita, respectivamente.
Neste primeiro exemplo, vou mostrar como retirar 2 caracteres destas partes da relação de cidades, da tabela ClientesCidades.

SELECT CidadeCliente, LEFT(CidadeCliente, 2) AS "Primeira parte", MID(CidadeCliente, 3, 2) AS "Parte do meio", RIGHT(CidadeCliente, 2) AS "Última parte" FROM ClientesCidades LIMIT 5;
+---------------+----------------+---------------+---------------+
| CidadeCliente | Primeira parte | Parte do meio | Última parte  |
+---------------+----------------+---------------+---------------+
| Buti          | Bu             | ti            | ti            |
| Whitehorse    | Wh             | it            | se            |
| Bertiolo      | Be             | rt            | lo            |
| Exeter        | Ex             | et            | er            |
| Fortune       | Fo             | rt            | ne            |
+---------------+----------------+---------------+---------------+
5 rows in set (0.00 sec)

A função LEFT() retorna o número especificado e caracteres de dentro de uma string. Veja um outro exemplo:

SELECT LEFT('GNU/Linux',3);
+----------------------+
| LEFT('GNU/Linux', 3) |
+----------------------+
| GNU                  |
+----------------------+
1 row in set (0.00 sec)

Com a função RIGHT(), tudo funciona do mesmo jeito. Só que na direção inversa:

SELECT RIGHT('GNU/Linux', 5);
+-----------------------+
| RIGHT('GNU/Linux', 5) |
+-----------------------+
| Linux                 |
+-----------------------+
1 row in set (0.00 sec)

A função MID() é sinônima de SUBSTRING(). Ela pede que você informe em que posição, no meio da string, a contagem deve começar:

SELECT MID('Debian GNU/Linux', 8, 3);

A declaração pede para “retirar 3 caracteres, a partir da 8a. posição”:

+-------------------------------+
| MID('Debian GNU/Linux', 8, 3) |
+-------------------------------+
| GNU                           |
+-------------------------------+
1 row in set (0.00 sec)

Mysql string functions
Clique para ampliar.

A função SUBSTR() tem funcionamento semelhante, de acordo com a documentação do MySQL (veja link ao final do texto).
A função LEFT() pode ser usada para encontrar todos os nomes, dentro de uma tabela, que comecem com uma determinada letra do alfabeto:

SELECT LEFT(nomeCliente,6) FROM ClientesCidades WHERE LEFT(nomeCliente,1)="W";
+---------------------+
| LEFT(nomeCliente,6) |
+---------------------+
| Winter              |
| Willow              |
| Wilma               |
| Willow              |
| Willow              |
| Wyomin              |
| Willa               |
| Wynne               |
+---------------------+
8 rows in set (0.00 sec)

Veja como obter uma relação de nomes de clientes cujos nomes começam com W, X, Y ou Z (as últimas letras do alfabeto em inglês), em ordem alfabética:

SELECT nomeCliente AS "Clientes de W a Z" FROM ClientesCidades WHERE LEFT(nomeCliente,1)>="W" ORDER BY nomeCliente;
+-------------------+
| Clientes de W a Z |
+-------------------+
| Willa Kerr        |
| Willow Graham     |
| Willow Mitchell   |
| Willow Simmons    |
| Wilma Hill        |
| Winter Fischer    |
| Wynne Bauer       |
| Wyoming Graham    |
| Xantha Wise       |
| Xyla Dennis       |
| Yen Espinoza      |
| Yetta Wood        |
| Yoshi Nguyen      |
| Yvonne Wilcox     |
| Zelenia Brady     |
| Zelenia Moss      |
| Zenia Carr        |
| Zephr Webb        |
| Zia Fernandez     |
+-------------------+
19 rows in set (0.00 sec)

Você pode usar a função CONCAT(), para construir novas strings, usando os nomes dos clientes:

SELECT CONCAT("A Cliente ",nomeCliente, " mora em ",cidadeCliente) AS "Clientes de Y a Z" FROM ClientesCidades WHERE LEFT(nomeCliente,1)>="Y" ORDER BY nomeCliente;

Veja o meu resultado:

+------------------------------------------------+
| Clientes de Y a Z                              |
+------------------------------------------------+
| A Cliente Yen Espinoza mora em Pramaggiore     |
| A Cliente Yetta Wood mora em Doues             |
| A Cliente Yoshi Nguyen mora em Daiano          |
| A Cliente Yvonne Wilcox mora em Sherbrooke     |
| A Cliente Zelenia Brady mora em Modena         |
| A Cliente Zelenia Moss mora em Elx             |
| A Cliente Zenia Carr mora em Wernigerode       |
| A Cliente Zephr Webb mora em Recanati          |
| A Cliente Zia Fernandez mora em Market Drayton |
+------------------------------------------------+
9 rows in set (0.00 sec)

Como você pode ver, dá pra brincar bastante com as funções de manipulação de strings. Faça as suas experiências!
Você pode usar a função CONCAT(), para alterar os valores de uma coluna.
No exemplo, abaixo, acrescentamos a string “_abc” aos nomes dos clientes da tabela ClientesCidades:

UPDATE ClientesCidades SET NomeCliente = CONCAT(NomeCliente,"_abc");
SELECT NomeCliente FROM ClientesCidades LIMIT 5;
+---------------------+
| NomeCliente         |
+---------------------+
| Dara Chase_abc      |
| Hanae Kane_abc      |
| Jaden Moon_abc      |
| Cathleen Harvey_abc |
| Marcia Cole_abc     |
+---------------------+
5 rows in set (0.00 sec)

Para desfazer esta bagunça, você pode usar a função LENGTH() para posicionar a função LEFT() antes destes 4 caracteres e gravar o resultado:

UPDATE ClientesCidades SET NomeCliente = LEFT(NomeCliente, LENGTH(NomeCliente)-4);

E veja como tudo volta ao normal:

SELECT NomeCliente FROM ClientesCidades LIMIT 5;
+-----------------+
| NomeCliente     |
+-----------------+
| Dara Chase      |
| Hanae Kane      |
| Jaden Moon      |
| Cathleen Harvey |
| Marcia Cole     |
+-----------------+
5 rows in set (0.00 sec)

Referências:

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

2 comentários sobre “Como decompor ou combinar strings no MySQL”

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *