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

Función REGEXP_COUNT() en Oracle

En Oracle, REGEXP_COUNT() La función devuelve el número de veces que aparece un patrón en una cadena de origen.

Sintaxis

La sintaxis es así:

REGEXP_COUNT (source_char, pattern [, position [, match_param]])

donde:

  • source_char es una expresión de carácter que sirve como valor de búsqueda.
  • pattern es la expresión regular.
  • position es un entero positivo que especifica dónde comenzar la búsqueda. El valor predeterminado es 1 , es decir, comience la búsqueda en el primer carácter.
  • match_param le permite cambiar el comportamiento de coincidencia predeterminado de la función. Por ejemplo, le permite especificar mayúsculas y minúsculas, cómo se tratan varias líneas y espacios, etc.

Ejemplo

Aquí hay un ejemplo básico del uso de REGEXP_COUNT() en Oráculo:

SELECT 
    REGEXP_COUNT('My dog drinks beer', 'd.g')
FROM DUAL;

Resultado:

1

En este caso hay una coincidencia.

Las expresiones regulares pueden ser muy poderosas, y este ejemplo usa un ejemplo muy simple. Para usar REGEXP_COUNT() efectivamente, necesitará saber el patrón correcto para usar para el resultado deseado. Los ejemplos de esta página se centran en REGEXP_COUNT() función en sí misma, no en expresiones regulares.

Sin coincidencia

Aquí hay un ejemplo donde no hay coincidencia:

SELECT REGEXP_COUNT('My dogs like dregs', 't.g')
FROM DUAL;

Resultado:

0

No hay coincidencia, entonces 0 es devuelto.

Coincidencias Múltiples

Aquí hay un ejemplo con múltiples coincidencias:

SELECT 
    REGEXP_COUNT('My dogs have dags', 'd.g')
FROM DUAL;

Resultado:

2

En este caso, hay dos coincidencias.

Posición de inicio

Puede especificar una posición inicial:

SELECT 
REGEXP_COUNT('My dogs have dags', 'd.g', 8)
FROM DUAL;

Resultado:

1

Así que aquí solo tenemos una coincidencia. Esto se debe a que la búsqueda no comienza hasta después de la primera aparición (posición 8).

Sensibilidad de mayúsculas y minúsculas

El REGEXP_COUNT() La función sigue las reglas de determinación de intercalación de Oracle, que definen la intercalación que se utilizará al hacer coincidir la cadena con el patrón.

Sin embargo, puede especificar explícitamente la distinción entre mayúsculas y minúsculas con el cuarto argumento opcional. Cuando hace esto, anula cualquier distinción entre mayúsculas y minúsculas o acentos de la intercalación determinada.

Puede especificar i para coincidencias que no distinguen entre mayúsculas y minúsculas y c para hacer coincidir mayúsculas y minúsculas.

He aquí un ejemplo:

SELECT 
    REGEXP_COUNT('My Cats', 'c.t', 1) AS "Default",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'i') AS "Case Insensitive",
    REGEXP_COUNT('My Cats', 'c.t', 1, 'c') AS "Case Sensitive"
FROM DUAL;

Resultado:

   Default    Case Insensitive    Case Sensitive 
__________ ___________________ _________________ 
         0                   1                 0

Aquí, mi colación distingue entre mayúsculas y minúsculas. Las otras dos cadenas fueron forzadas a una coincidencia entre mayúsculas y minúsculas y mayúsculas y minúsculas, respectivamente.

Argumentos nulos

Con la excepción del cuarto argumento, proporcionando null para un argumento da como resultado null :

SET NULL 'null';
SELECT 
    REGEXP_COUNT(null, 'c.t', 1, 'i') AS "1",
    REGEXP_COUNT('Cat', null, 1, 'i') AS "2",
    REGEXP_COUNT('Cat', 'c.t', null, 'i') AS "3",
    REGEXP_COUNT('Cat', 'c.t', 1, null) AS "4"
FROM DUAL;

Resultado:

      1       2       3    4 
_______ _______ _______ ____ 
   null    null    null    0

De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null ocurre como resultado de un SQL SELECT declaración.

Sin embargo, puede usar SET NULL para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null debe ser devuelto.

Número incorrecto de argumentos

No pasar argumentos a la función, o pasar muy pocos, da como resultado un error:

SELECT REGEXP_COUNT()
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Lo mismo se aplica cuando pasamos demasiados argumentos:

SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL;

Resultado:

Error starting at line : 1 in command -
SELECT REGEXP_COUNT('Cat', 'c.t', 1, 'i', 'oops')
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

Más información

El REGEXP_COUNT() (así como otras implementaciones de expresiones regulares de Oracle) se ajusta al estándar de expresiones regulares de la Interfaz de sistema operativo portátil (POSIX) de IEEE y a las Directrices de expresiones regulares de Unicode del Consorcio Unicode.

Consulte la documentación de Oracle para obtener más información y ejemplos de REGEXP_COUNT() función.