MariaDB
 sql >> Base de Dados >  >> RDS >> MariaDB

4 maneiras de encontrar linhas que contêm letras minúsculas no MariaDB


Aqui estão quatro opções para retornar linhas que contêm caracteres minúsculos no MariaDB.

Dados de amostra


Suponha que temos uma tabela com os seguintes dados:
SELECT c1 FROM t1;

Resultado:
+----------------+
| c1             |
+----------------+
| CAFÉ           |
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| JB 007         |
| 007            |
| NULL           |
|                |
| É              |
| É 123          |
| é              |
| é 123          |
| ø              |
| Ø              |
+----------------+

Podemos usar os seguintes métodos para retornar as linhas que contêm letras minúsculas.

Opção 1:comparar com uma classe de caracteres POSIX


Podemos usar o REGEXP operador para executar uma correspondência de um padrão de expressão regular.

Uma opção simples é comparar nossa coluna com o [:lower:] Classe de caracteres POSIX:
SELECT c1 FROM t1
WHERE c1 REGEXP '[[:lower:]]';

Resultado:
+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

RLIKE é um sinônimo para REGEXP , para que possamos substituir REGEXP com RLIKE para obter o mesmo resultado:
SELECT c1 FROM t1
WHERE c1 RLIKE '[[:lower:]]';

Opção 2:Compare com o UPPER() Cadeia


Outra opção é usar o UPPER() função para comparar o valor original com seu equivalente em maiúsculas:
SELECT c1 FROM t1
WHERE BINARY UPPER(c1) <> BINARY c1;

Resultado:
+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
| é              |
| é 123          |
| ø              |
+----------------+

Usando o diferente de (<> ) (você pode usar alternativamente != em vez de <> se preferir), apenas retornamos as linhas que são diferentes de seus equivalentes em maiúsculas. A razão pela qual fazemos isso é porque, se um valor é o mesmo que seu equivalente em maiúsculas, então já era em maiúsculas (e não queremos devolvê-lo).

Por padrão, o MariaDB realiza uma pesquisa que não diferencia maiúsculas de minúsculas e, portanto, uso o BINARY operador para obter uma pesquisa com distinção entre maiúsculas e minúsculas.

Isso também pode ser feito assim:
SELECT c1 FROM t1
WHERE BINARY(UPPER(c1)) <> BINARY(c1);

Opção 3:comparar com os caracteres reais


Outra opção é usar o REGEXP operador com um padrão de expressão regular que inclui explicitamente cada caractere minúsculo que queremos corresponder:
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[abcdefghijklmnopqrstuvwxyz]';

Resultado:
+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+

Desta vez, menos linhas são retornadas do que nos exemplos anteriores. Isso porque não especifiquei caracteres como é e ø , que foram retornados nesses exemplos. Nosso resultado contém é mas essa linha só foi retornada porque também contém outros caracteres minúsculos que fazem partida.

Portanto, você precisará garantir que todos os caracteres válidos sejam cobertos se usar essa opção.

Opção 4:comparar com um intervalo de caracteres


Outra maneira de fazer isso é especificar o intervalo de caracteres que queremos corresponder:
SELECT c1 FROM t1
WHERE BINARY c1 REGEXP BINARY '[a-z]';

Resultado:
+----------------+
| c1             |
+----------------+
| Café           |
| café           |
| 1café          |
| eCafé          |
| James Bond 007 |
+----------------+