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