SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

3 maneiras de encontrar linhas que contêm letras minúsculas no SQLite


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