Aqui estão três opções para retornar linhas que contêm caracteres maiú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 maiúsculas.
Opção 1:Compare com o LOWER()
Cadeia
Podemos usar o
LOWER()
função para comparar o valor original com seu equivalente em minúsculas:SELECT c1 FROM t1
WHERE LOWER(c1) <> c1;
Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 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 minúsculas. A razão pela qual fazemos isso é porque, se um valor é o mesmo que seu equivalente em minúsculas, então já estava em minú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 maiúsculos
É
e Ø
a menos que o valor também inclua uma letra maiúscula não unicode. SQLite não suporta totalmente caracteres unicode. Por exemplo, o LOWER()
e UPPER()
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 minúsculas. 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 maiúsculo que queremos corresponder:SELECT c1 FROM t1
WHERE c1 REGEXP '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';
Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007
Podemos incluir caracteres unicode em nossa lista, se desejarmos:
SELECT c1 FROM t1
WHERE c1 REGEXP '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]';
Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007 É É 123 Ø
Opção 3:comparar com um intervalo de caracteres
Outra maneira de fazer isso é especificar o intervalo de caracteres maiúsculos que queremos corresponder:
SELECT c1 FROM t1
WHERE c1 REGEXP '[A-Z]';
Resultado:
c1 -------------- CAFÉ Café eCafé James Bond 007 JB 007