Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

4 maneiras de encontrar linhas que contêm letras maiúsculas no Oracle


Aqui estão quatro opções para retornar linhas que contêm caracteres maiúsculos no Oracle Database.

Dados de amostra


Suponha que temos uma tabela com os seguintes dados:
SELECT c1 FROM t1;

Resultado:
CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 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


REGEXP_LIKE da Oracle A condição está em conformidade com o padrão de expressão regular POSIX e as Diretrizes de Expressão Regular Unicode. Podemos, portanto, usar o [:upper:] Classe de caracteres POSIX para verificar caracteres maiúsculos:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:upper:]]');

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

Opção 2: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:
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 Oracle realiza uma pesquisa com distinção entre maiúsculas e minúsculas e, portanto, não preciso fazer mais nada na consulta para diferenciá-la.

Opção 3:comparar com os caracteres reais


Outra opção é usar o REGEXP_LIKE condição com um padrão de expressão regular que inclui explicitamente cada caractere maiúsculo que queremos corresponder:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

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

O 'c' especifica a correspondência que diferencia maiúsculas de minúsculas e acentos, mesmo se o agrupamento determinado da condição não diferencia maiúsculas de minúsculas ou acentos.

Desta vez, menos linhas são retornadas do que nos exemplos anteriores. Isso 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, você precisará garantir que todos os caracteres válidos sejam cobertos se usar essa opção.

Aqui está novamente com esses dois personagens incluídos:
SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[ÉØABCDEFGHIJKLMNOPQRSTUVWXYZ]', 'c');

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

Opção 4: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 REGEXP_LIKE(c1, '[A-Z]', 'c');

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