Aqui estão quatro opções para retornar linhas que contêm caracteres minú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 [:lower:]
Classe de caracteres POSIX para verificar caracteres minúsculos:SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:lower:]]');
Resultado:
Café café 1café eCafé James Bond 007 é é 123 ø
Opção 2:Compare 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:
Café café 1café eCafé James Bond 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 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). 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 minúsculo que queremos corresponder:SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[abcdefghijklmnopqrstuvwxyz]', 'c');
Resultado:
Café café 1café eCafé James Bond 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 minú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é 1café eCafé James Bond 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é 1café eCafé James Bond 007