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