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