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

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


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