Función escalar REGEXP_REPLACE
La función escalar REGEXP_REPLACE devuelve una versión modificada de la serie de origen donde las apariciones del patrón de expresión regular encontradas en la serie de origen se sustituyen por la serie de sustitución especificada.
El esquema es SYSIBM.
- serie-fuente
- Expresión que especifica la serie en la que debe realizarse la búsqueda. Esta expresión debe devolver una serie de caracteres incluida, serie gráfica, valor numérico, valor booleano, o valor de fecha y hora. Un valor numérico,booleano o de fecha y hora se convierte de forma explícita en VARCHAR antes de que se evalúe la función. Una serie de caracteres no puede tener el atributo FOR BIT DATA (SQLSTATE 42815).
- expresión-patrón
- Una expresión que especifica la serie de expresión regular que es el patrón para la búsqueda. Esta expresión debe devolver una serie de caracteres incluida, serie gráfica, valor numérico, valor booleano, o valor de fecha y hora. Un valor numérico,booleano o de fecha y hora se convierte de forma explícita en VARCHAR antes de que se evalúe la función. La longitud de una expresión CLOB o DBCLOB no debe superar la longitud máxima de un tipo de datos VARCHAR o VARGRAPHIC. Una serie de caracteres no puede tener el atributo FOR BIT DATA (SQLSTATE 42815).
- serie-sustitución
- Expresión que especifica la serie de sustitución para subseries
coincidentes. La expresión debe devolver un valor que sea una serie de caracteres incluida, serie gráfica, valor numérico, valor booleano, o valor de fecha y hora. Un valor numérico,booleano o de fecha y hora se convierte de forma explícita en VARCHAR antes de que se evalúe la
función.
Una serie de caracteres no puede tener el atributo FOR BIT DATA (SQLSTATE 42815). La serie de sustitución predeterminada es la serie vacía.
El contenido de la serie de sustitución puede incluir referencias al texto del grupo de captura desde la búsqueda que se va a utilizar en el texto de sustitución. Estas referencias tiene el formato '$n' o '\n', donde n es el número del grupo de captura y 0 representa toda la serie que coincide con el patrón. El valor para n debe estar en el rango de 0-9 y no debe ser mayor del número de grupos de captura del patrón (SQLSTATE 2201V). Por ejemplo, se puede utilizar '$2' o '\2' para hacer referencia al contenido encontrado en la serie de origen para el segundo grupo de captura especificado en el patrón de expresión. Si la expresión de patrón debe incluir una referencia literal a un carácter '$' o '\', dicho carácter debe estar precedido por un carácter '/' como carácter de escape ('\$' o '\\').
- inicio
- Expresión que especifica la posición entro de serie-fuente en la que debe iniciarse la búsqueda. Esta expresión debe devolver una serie de caracteres incluida, serie gráfica, valor booleano o valor numérico. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función. El valor del entero debe ser mayor o igual a 1. Si se especifica OCTETS y la serie de origen corresponde a datos gráficos, el valor del entero debe ser impar (SQLSTATE 428GC). El valor predeterminado es 1. Consulte la descripción del parámetro para CODEUNITS16, CODEUNITS32 o para OCTETS de la unidad de serie que se aplica a la posición inicial.
- aparición
- Una expresión que especifica qué expresión de patrón incluida en la serie de origen se ha de buscar y sustituir. Esta expresión debe devolver una serie de caracteres incluida, serie gráfica, valor booleano o valor numérico. Si el valor no es del tipo INTEGER, se convierte de forma implícita en INTEGER antes de evaluar la función. El valor de la aparición debe ser mayor o igual a 0. El valor predeterminado de la aparición es 0, lo que indica que se sustituyen todas las apariciones de la expresión de patrón en la serie de origen.
- distintivos
- Expresión que especifica los distintivos que controlan los
aspectos de la coincidencia de patrón. La expresión debe devolver una serie de caracteres incluida que no especifique el atributo FOR BIT DATA (SQLSTATE
42815). La serie puede incluir uno o más valores de
distintivo válidos y la combinación de valores de distintivo debe ser
válida (SQLSTATE 2201T). Una serie vacía es la misma que el valor 'c'. El valor de distintivo predeterminado es 'c'.
Tabla 1. Valores de distintivo soportados Valor Distintivo Descripción c Especifica que la coincidencia distingue entre mayúsculas y minúsculas. Este distintivo es el valor predeterminado si no se especifica 'c' o 'i'. Este valor no se debe especificar con un valor de 'i'. i Especifica que la coincidencia no distingue entre mayúsculas y minúsculas. Este valor no se debe especificar con un valor de 'c'. m Especifica que los datos de entrada pueden contener más de una línea. De forma predeterminada, el carácter '^' en un patrón coincide únicamente con el inicio de la serie de entrada; el carácter '$' en un patrón coincide únicamente con el final de la serie de entrada. Si el distintivo está establecido, "^" y "$" también coincide con el inicio y final de cada línea dentro de la serie de entrada. n Especifica que el carácter '.' en un patrón coincide con el terminador de línea de la serie de entrada. De forma predeterminada, el carácter '.' en un patrón no coincide con un terminador de línea. Un par retorno de carro y salto de línea en la serie de entrada se comporta como un terminador de línea única, y coincide con "." en un patrón. s Especifica que el carácter '.' en un patrón coincide con el terminador de línea de la serie de entrada. Este valor es un sinónimo para el valor 'n'. x Especifica que los caracteres de espacio en blanco de un patrón se ignoran, a menos que sean caracteres de escape. - CODEUNITS16, CODEUNITS32 u OCTETS
- Especifica la unidad de serie del valor de inicio:
- CODEUNITS16 especifica que el valor de inicio se expresa en unidades de código UTF-16 de 16 bits.
- CODEUNITS32 especifica que el valor de inicio se expresa en unidades de código UTF-32 de 32 bits. Es el valor por omisión.
- OCTETS especifica que el valor de inicio se expresa en bytes.
Si la unidad de serie se especifica como CODEUNITS16 u OCTETS, y si la unidad de serie de la serie de origen es CODEUNITS32, se devuelve un error (SQLSTATE 428GC).
Para obtener más información, consulte "Unidades de serie en funciones incorporadas" en Series de caracteres.
Resultado
El resultado de la función es un valor serie. Si no hay apariciones del patrón que se vayan a sustituir y ningún argumento es nulo, se devuelve la serie original. El tipo de datos de la serie es el mismo tipo de datos que la serie de origen, excepto para CHAR, que se convierte en VARCHAR; y VARGRAPHIC, que se convierte en GRAPHIC.
MIN(MaxTypeLen, LAS+(LAS+1)*LAR)
donde
MaxTypeLen representa el atributo de longitud máxima para
el tipo de datos del resultado, LAS representas el atributo
de longitud para el tipo de datos de serie-origen y
LAR representa el atributo de longitud para el tipo de
datos de serie de sustitución.
Si la serie de sustitución no se especifica,
el valor para LAR es 0. Si la
longitud real de la serie de resultado excede el máximo del tipo de datos de retorno,
se devuelve un error (SQLSTATE 54006).Si cualquier argumento de la función REGEXP_REPLACE puede ser nulo, el resultado puede ser nulo. Si ningún argumento es nulo, el resultado es el valor nulo.
Notas
- El proceso de expresión regular se realiza utilizando la interfaz de expresión regular International Components for Unicode (ICU).
- Consideraciones para bases de datos no Unicode:
- Un patrón de expresión regular soporta sólo los caracteres de control de media anchura; utilice un tipo de datos de serie de caracteres para el argumento de expresión de patrón. Se puede utilizar un tipo de datos de serie de caracteres para el argumento de expresión de patrón cuando se utiliza un tipo de datos de serie gráfica para el argumento de serie de origen.
- El argumento de serie de origen debe ser un tipo de datos de serie gráfica si el argumento de expresión de patrón es un tipo de datos de serie gráfica.
- Los argumentos de serie de origen y serie de sustitución deben ser tipos de datos de serie de caracteres o tipos de datos de serie gráfica.
Ejemplo
SELECT REGEXP_REPLACE(
'Red Yellow RED Blue Red Green Blue', 'R.d','Orange',1,2,'c')
FROM sysibm.sysdummy1
El resultado es 'Red Yellow RED Blue Orange Green Blue'.