PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

4 maneiras de encontrar linhas que contêm caracteres maiúsculos no PostgreSQL


Aqui estão quatro opções para retornar linhas que contêm letras maiúsculas no PostgreSQL.

Dados de amostra


Suponha que temos uma tabela com os seguintes dados:
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:comparar com uma classe de caracteres POSIX


Podemos usar o ~ operador para executar uma correspondência com distinção entre maiúsculas e minúsculas de um padrão de expressão regular. O padrão pode ser tão simples ou complexo quanto quisermos.

Uma opção simples é comparar nossa coluna com o [:upper:] Classe de caracteres POSIX:
SELECT c1 FROM t1
WHERE c1 ~ '[[:upper:]]';

Resultado:
       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007
 É
 É 123
 Ø

Opção 2:compare com o LOWER() Cadeia


Outra opção é 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
 É
 É 123
 Ø

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).

Por padrão, o PostgreSQL realiza uma correspondência que diferencia maiúsculas de minúsculas e, portanto, não precisamos especificar um agrupamento que diferencia maiúsculas de minúsculas para obter o resultado que desejamos.

Opção 3:comparar com os caracteres reais


Outra opção é usar o ~ 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 ~ '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]';

Resultado:
       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007

Nesse caso, menos linhas são retornadas do que nos exemplos anteriores. Isso ocorre porque não especifiquei caracteres como É e Ø , que foram retornados nesses exemplos. Nosso resultado contém É mas essa linha só foi retornada porque também contém outros caracteres maiúsculos que fazem partida.

Portanto, essa opção é mais limitada que a anterior, mas fornece mais controle sobre os caracteres que você deseja corresponder.

Opção 4:comparar com um intervalo de caracteres


Alternativamente, podemos especificar o intervalo de caracteres que queremos corresponder:
SELECT c1 FROM t1
WHERE c1 ~ '[A-Z]';

Resultado:
       c1       
----------------
 CAFÉ
 Café
 eCafé
 James Bond 007
 JB 007