sql >> Base de Datos >  >> RDS >> Oracle

4 formas de encontrar filas que contienen letras minúsculas en Oracle

Aquí hay cuatro opciones para devolver filas que contienen caracteres en minúsculas en Oracle Database.

Datos de muestra

Supongamos que tenemos una tabla con los siguientes datos:

SELECT c1 FROM t1;

Resultado:

CAFÉ
Café
café
1café
eCafé
James Bond 007
JB 007
007
É
É 123
é
é 123
ø
Ø

Podemos usar los siguientes métodos para devolver las filas que contienen letras mayúsculas.

Opción 1:comparar con una clase de caracteres POSIX

REGEXP_LIKE de Oracle condición cumple con el estándar de expresiones regulares POSIX y las Directrices de expresiones regulares de Unicode. Por lo tanto, podemos usar el [:lower:] Clase de caracteres POSIX para buscar caracteres en minúsculas:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[[:lower:]]');

Resultado:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

Opción 2:Comparar con UPPER() Cadena

Podemos usar UPPER() función para comparar el valor original con su equivalente en mayúsculas:

SELECT c1 FROM t1
WHERE UPPER(c1) <> c1;

Resultado:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

Usando el no igual a (<> ) operador (alternativamente, puede usar != en lugar de <> si lo prefiere), solo devolvemos aquellas filas que son diferentes a sus equivalentes en mayúsculas. La razón por la que hacemos esto es porque, si un valor es igual a su equivalente en mayúsculas, para empezar ya estaba en mayúsculas (y no queremos devolverlo).

De forma predeterminada, Oracle realiza una búsqueda que distingue entre mayúsculas y minúsculas, por lo que no necesito hacer nada más en la consulta para que distinga entre mayúsculas y minúsculas.

Opción 3:comparar con los caracteres reales

Otra opción es usar el REGEXP_LIKE condición con un patrón de expresión regular que incluye explícitamente cada carácter en minúscula que queremos hacer coincidir:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[abcdefghijklmnopqrstuvwxyz]', 'c');

Resultado:

Café
café
1café
eCafé
James Bond 007

El 'c' especifica coincidencias que distinguen entre mayúsculas y minúsculas y acentos, incluso si la intercalación determinada de la condición no distingue entre mayúsculas y minúsculas ni acentos.

Esta vez se devuelven menos filas que en los ejemplos anteriores. Eso es porque no especifiqué caracteres como é y ø , que se devolvieron en esos ejemplos. Nuestro resultado contiene é pero esa fila solo se devolvió porque también contiene otros caracteres en minúscula que do partido.

Por lo tanto, deberá asegurarse de tener cubiertos todos los caracteres válidos si usa esta opción.

Aquí está de nuevo con esos dos personajes incluidos:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[éøabcdefghijklmnopqrstuvwxyz]', 'c');

Resultado:

Café
café
1café
eCafé
James Bond 007
é
é 123
ø

Opción 4:comparar con un rango de caracteres

Otra forma de hacerlo es especificar el rango de caracteres en mayúscula que queremos hacer coincidir:

SELECT c1 FROM t1
WHERE REGEXP_LIKE(c1, '[a-z]', 'c');

Resultado:

Café
café
1café
eCafé
James Bond 007