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

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

Aquí hay cuatro opciones para devolver filas que contienen caracteres en mayú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 [:upper:] Clase de caracteres POSIX para verificar caracteres en mayúsculas:

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

Resultado:

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

Opción 2:Comparar con LOWER() Cadena

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

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

Resultado:

CAFÉ
Café
eCafé
James Bond 007
JB 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 minúsculas. La razón por la que hacemos esto es porque, si un valor es igual a su equivalente en minúsculas, para empezar ya estaba en minú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 mayúscula que queremos hacer coincidir:

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

Resultado:

CAFÉ
Café
eCafé
James Bond 007
JB 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 mayú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é
eCafé
James Bond 007
JB 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é
eCafé
James Bond 007
JB 007