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

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


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