Aqui estão três opções para retornar linhas que contêm caracteres minúsculos no SQLite.
Dados de amostra
Suponha que temos uma tabela com os seguintes dados:
.nullvalue null
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 o UPPER()
Cadeia
Podemos usar o
UPPER()
função para comparar o valor original com seu equivalente em maiúsculas:SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007
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). O SQLite realiza uma pesquisa que diferencia maiúsculas de minúsculas e, portanto, não precisamos fazer mais nada para obter o resultado que desejamos.
Você deve ter notado que o exemplo acima não retornou os caracteres unicode minúsculos
é
e ø
a menos que o valor também inclua uma letra minúscula não unicode. SQLite não suporta totalmente caracteres unicode. Por exemplo, o UPPER()
e LOWER()
As funções fornecem apenas mapeamento de maiúsculas e minúsculas para as 26 letras usadas no idioma inglês. Portanto, o exemplo acima não converteu nenhum caractere unicode em seu equivalente em maiúscula. Dê uma olhada na extensão SQLite ICU se você precisar trabalhar com caracteres unicode.
Opção 2: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 c1 REGEXP '[abcdefghijklmnopqrstuvwxyz]';
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007
Podemos incluir caracteres unicode em nossa lista, se desejarmos:
SELECT c1 FROM t1
WHERE c1 REGEXP '[éøabcdefghijklmnopqrstuvwxyz]';
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007 é é 123 ø
Opção 3:comparar com um intervalo de caracteres
Outra maneira de fazer isso é especificar o intervalo de caracteres minúsculos que queremos corresponder:
SELECT c1 FROM t1
WHERE c1 REGEXP '[a-z]';
Resultado:
c1 -------------- Café café 1café eCafé James Bond 007