Los datos expuestos en este blog, son solo de índole informativo. Por favor realiza siempre una copia de seguridad antes de realizar cualquier cambio en tu proyecto.
Oracle/PLSQL: función REGEXP_COUNT
Este tutorial de Oracle explica cómo usar Oracle/PLSQL Función REGEXP_COUNT Con sintaxis y ejemplos.
describir
La función Oracle/PLSQL REGEXP_COUNT cuenta el número de veces que aparece un patrón en una cadena. Esta función, introducida en Oracle 11g, le permitirá utilizar la coincidencia de patrones de expresiones regulares para contar el número de ocurrencias de una subcadena en una cadena.
sintaxis
La sintaxis de la función REGEXP_COUNT en Oracle es:
REGEXP_COUNT( string, pattern [, start_position [, match_parameter ] ] )
parámetro o parámetro
cadena La cadena a buscar. Las cadenas pueden ser CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB o NCLOB.patrón
Información de coincidencia de expresiones regulares. Puede ser una combinación de lo siguiente:
valor | describir |
---|---|
^ | Coincide con el principio de la cadena. Si se usa con el parámetro de coincidencia de ‘m’, coincide con el comienzo de una línea en cualquier parte de la expresión. |
PS | Coincide con el final de la cadena. Si se usa con el parámetro de coincidencia de ‘m’, coincidirá con el final de la línea en cualquier parte de la expresión. |
* | Coincide con cero o más ocurrencias. |
+ | Coincide con una o más coincidencias. |
? | Partido cero o una vez. |
. | Coincide con cualquier carácter excepto NULL. |
| | Use como “O” para especificar múltiples alternativas. |
[ ] | Se utiliza para especificar una lista de coincidencias en la que intenta hacer coincidir cualquiera de los caracteres de la lista. |
[^ ] | Se utiliza para especificar una lista no coincidente en la que está intentando hacer coincidir cualquier carácter excepto los de la lista. |
( ) | Se utiliza para agrupar expresiones en subexpresiones. |
{arroz} | Coincidir m veces. |
{arroz,} | Coincide al menos m veces. |
{Minnesota} | Coincide al menos m veces, pero no más de n veces. |
norte | n es un número entre 1 y 9. Coincide con la n-ésima subexpresión encontrada en ( ) antes de que se encuentre n. |
[..] | Coincide con un elemento de intercalación que puede tener más de un carácter. |
[::] | Coincide con las clases de personajes. |
[==] | Igualar clases de equivalencia. |
D | Coincide con un carácter numérico. |
D | Coincide con caracteres no numéricos. |
w | Coincide con un carácter de palabra. |
W | Coincide con caracteres que no son palabras. |
s | Coincide con un carácter de espacio en blanco. |
S | Coincide con caracteres que no son espacios en blanco. |
Una | Coincide con el principio de la cadena o antes de la nueva línea al final de la cadena coincidente. |
Z | Coincide con el final de la cadena. |
*? | Coincide con cero o más ocurrencias del patrón anterior. |
+? | Coincide con una o más apariciones del patrón anterior. |
?? | Coincide con cero o una aparición del patrón anterior. |
{norte}? | Coincide con el patrón anterior n veces. |
{norte,}? | Coincide con el patrón anterior al menos n veces. |
{Nuevo Méjico}? | Haga coincidir el patrón anterior al menos n veces, pero no más de m veces. |
start_position es opcional. Es la posición en la cadena donde comienza la búsqueda. Si se omite, el valor predeterminado es 1, la primera posición en la cadena.parámetro de coincidencia
Electivo. Le permite modificar el comportamiento de coincidencia de la función REGEXP_COUNT. Puede ser una combinación de lo siguiente:
valor | describir |
---|---|
‘C’ | Realice coincidencias con distinción entre mayúsculas y minúsculas. |
‘Una generación’ | Realice una coincidencia que no distinga entre mayúsculas y minúsculas. |
‘norte’ | Permite que el carácter de punto (.) coincida con una nueva línea. De forma predeterminada, los puntos son comodines. |
‘I’ | Se supone que una expresión tiene varias líneas, donde ^ es el comienzo de una línea y $ es el final de una línea, independientemente de la posición de estos caracteres en la expresión. De forma predeterminada, se supone que las expresiones son de una sola línea. |
‘X’ | Los caracteres de espacio en blanco se ignoran. De forma predeterminada, los caracteres de espacio en blanco coinciden como cualquier otro carácter. |
devolver los bienes
La función REGEXP_COUNT devuelve un valor numérico.
notas
- Si se proporcionan valores en conflicto para match_parameter, la función REGEXP_COUNT utilizará el último valor.
- Si se omite el parámetro match_behavior, la función REGEXP_COUNT usará el parámetro NLS_SORT para determinar si se debe usar una búsqueda que distingue entre mayúsculas y minúsculas, supondrá que la cadena es una sola línea y que el carácter de punto coincide con cualquier carácter (no un salto de línea). personaje).
- Si la función REGEXP_COUNT no encuentra ninguna aparición del patrón, devuelve 0.
aplicar para
La función REGEXP_COUNT está disponible en las siguientes versiones de Oracle/PLSQL:
- Oráculo 12c, Oráculo 11g
Ejemplo: hacer coincidir un solo carácter
Comencemos con el caso más simple. Contemos el número de veces que aparece el carácter ‘t’ en la cadena.
Por ejemplo:
SELECT REGEXP_COUNT ('TechOnTheNet is a great resource', 't') FROM dual; Result: 2
Este ejemplo devolverá 2 porque está contando el número de ocurrencias de ‘t’ en la cadena. Dado que no especificamos un valor de parámetro de coincidencia, la función REGEXP_COUNT realizará una búsqueda que distingue entre mayúsculas y minúsculas, lo que significa que el carácter “T” no se incluirá en el conteo.
Si quisiéramos incluir tanto ‘t’ como ‘T’ en los resultados y realizar una búsqueda que no distinga entre mayúsculas y minúsculas, podríamos modificar nuestra consulta de la siguiente manera:
SELECT REGEXP_COUNT ('TechOnTheNet is a great resource', 't', 1, 'i') FROM dual; Result: 4
Ahora que proporcionamos una posición de inicio de 1 y un parámetro de coincidencia de ‘i’, la consulta devolverá 4 como resultado. Esta vez, los valores “t” y “T” se incluirán en el conteo.
Si quisiéramos contar el número de “t” en una columna, podríamos intentar algo como esto:
SELECT REGEXP_COUNT (last_name, 't', 1, 'i') AS total FROM contacts;
Esto contará el número de valores “t” o “T” en el campo last_name en la tabla de contactos.
Ejemplo: coincidencia de varios caracteres
A continuación, veamos cómo usar la función REGEXP_COUNT para hacer coincidir patrones de varios caracteres.
Por ejemplo:
SELECT REGEXP_COUNT ('The example shows how to use the REGEXP_COUNT function', 'the', 1, 'i') FROM dual; Result: 2
Este ejemplo devolverá el número de veces que aparece la palabra “the” en la cadena. Realizará una búsqueda que no distingue entre mayúsculas y minúsculas, por lo que se devolverá 2.
Por ejemplo:
SELECT REGEXP_COUNT ('The example shows how to use the REGEXP_COUNT function', 'the', 4, 'i') FROM dual; Result: 1
Este ejemplo devuelve el número de veces que aparece la palabra “the” en la cadena que comienza en la posición 4. En este caso, devolverá 1 porque salta los primeros 3 caracteres de la cadena antes de buscar el patrón.
Ahora, veamos cómo usar la función REGEXP_COUNT con una columna de tabla y buscar varios caracteres.
Por ejemplo:
SELECT REGEXP_COUNT (other_comments, 'the', 1, 'i') FROM contacts; Result: 3
En este ejemplo, contaremos las apariciones de “the” en el campo other_comments en la tabla de contactos.
Ejemplo: coincidencia de múltiples alternativas
El siguiente ejemplo que veremos involucra el uso |
patrón.Esta |
Los patrones se utilizan como “o” para especificar múltiples alternativas.
Por ejemplo:
SELECT REGEXP_COUNT ('Anderson', 'a|e|i|o|u') FROM dual; Result: 2
Este ejemplo devolverá 2 porque está contando el número de vocales (a, e, i, o o u) en la cadena “Anderson”. Dado que no especificamos un valor de parámetro de coincidencia, la función REGEXP_COUNT realizará una búsqueda que distingue entre mayúsculas y minúsculas, lo que significa que la ‘A’ en ‘Anderson’ no se contará.
Podemos modificar nuestra consulta para realizar una búsqueda que no distinga entre mayúsculas y minúsculas de la siguiente manera:
SELECT REGEXP_COUNT ('Anderson', 'a|e|i|o|u', 1, 'i') FROM dual; Result: 3
Ahora, dado que proporcionamos una posición de inicio de 1 y un parámetro de coincidencia de ‘i’, la consulta devolverá 3 como resultado. Esta vez, se contará la “A” en “Anderson”.
Ahora, mostremos rápidamente cómo usar esta función con columnas.
Supongamos que tenemos una tabla de contactos con los siguientes datos:
Identificación de contacto | apellido |
---|---|
1000 | anderson |
2000 | Herrero |
3000 | Johnson |
Ahora, ejecutemos la siguiente consulta:
SELECT contact_id, last_name, REGEXP_COUNT (last_name, 'a|e|i|o|u', 1, 'i') AS total FROM contacts;
Estos son los resultados que devolverá la consulta:
Identificación de contacto | apellido | todo |
---|---|---|
1000 | anderson | 3 |
2000 | Herrero | 1 |
3000 | Johnson | 2 |