Como pesquisar sequências de caracteres dentro de strings, com a função LOCATE, no MySQL

A função LOCATE() do MySQL permite encontrar sequência dentro de uma cadeia de caracteres. Ou seja, a função pode ser usada para identificar uma substring dentro de uma string.
A função LOCATE() recebe dois argumentos: a substring que você deseja encontrar e o texto dentro do qual ela será procurada.
Capa do tutorial - como encontrar sequências de caracteres no MySQL
Se a busca for bem sucedida, a função retorna a posição em que a substring desejada se encontra ou o valor 0 (zero), caso ela não esteja presente.
Opcionalmente, é possível fornecer um terceiro argumento à função — para indicar em que posição, dentro da string principal, a busca deve ter início.

Exemplos de uso da função locate no MySQL

Neste primeiro exemplo, vou mostrar como criar uma variável no MySQL e, em seguida, como efetuar uma busca dentro dela com a função LOCATE().

SET @minhavar="O mysqladmin é um cliente para executar operações administrativas no MySQL. Ele pode ser usado para verificar a configuração do servidor e seu estado atual, além de criar e apagar bancos de dados - entre outras coisas.";
SELECT LOCATE("cliente",@minhavar);
+-----------------------------+
| LOCATE("cliente",@minhavar) |
+-----------------------------+
|                          19 |
+-----------------------------+
1 row in set (0.00 sec)

A busca efetuada é insensível a caixa das letras, ou seja, tanto faz procurar por “cliente” como “ClIEnTE” — para a função LOCATE(), as duas strings são a mesma coisa.

A função LOCATE() era sensível à caixa das letras nas versões do MySQL anteriores a 4.0.0
— MySQL Cookbook by Paul DuBois

O exemplo abaixo mostra como fazer a busca dentro do banco de dados:

SELECT CidadeCliente FROM ClientesCidades WHERE LOCATE('co',CidadeCliente);

O comando, acima, ordena uma pesquisa dentro da tabela ClientesCidades por CidadeCliente, em cujo texto, tenha a substring “co”. Veja o resultado:

+------------------------+
| CidadeCliente          |
+------------------------+
| Girifalco              |
| San Costantino Calabro |
| Rocourt                |
| Beaconsfield           |
| Rachecourt             |
| Vancouver              |
| Lacombe                |
| Port Lincoln           |
| Corroy-le-Grand        |
| Recco                  |
| Coalhurst              |
| San Demetrio Corone    |
| Lakeland County        |
| Beaconsfield           |
| Colonnella             |
+------------------------+
15 rows in set (0.01 sec)