2011-01-21 50 views

Respuesta

2

No hay compatibilidad incorporada para las expresiones regulares en DB2 9.7.

La única manera es usando UDF o funciones de tabla como se describe en el artículo 'OMG Ponies' agregado en el comentario.

@ dan1111: No me gusta que mi publicación se edite, especialmente si la gente no puede leer la pregunta correctamente. El PO pidió Cualquier REGEXP-In-SQL soporte para DB2 9,7

SQL no es XQuery !!!

Lo siento, no elimine el texto de mi respuesta 100% correcta. Puede agregar un comentario o escribir su propia respuesta.

+2

Esto no es cierto. La expresión regular se admitió en DB2 9.7 a través de xQuery con la función de coincidencias: http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.xml.doc/doc/xqrfnmat. html – AngocA

+0

Ahora sin xQuery: http://stackoverflow.com/a/38522897/1388357 –

+0

@TannerFaulkner ya es hora. ;-) IBM siempre llega tarde agregando lo obvio. – tessus

6

Soy komikoni (Keisuke Konishi).

Creé la función de expresión regular (UDF) que no existe en db2. UDF utilizando SQL/XML (Xquery). Puedes instalarlo fácilmente.

lista de expresiones regulares proporcionan UDF

  1. REG_MATCHES proporciona la existencia de coincidencia (escalar)
  2. REG_REPLACE sustitución de cadenas (escalar)
  3. REG_COUNT número de coincidencias recuperados (Escalar)
  4. REG_POSITION partido de adquisición de posición (escalar)
  5. REG_SUBSTR consigue un emparejamiento de cadenas (escalar)
  6. REG_SUBSTR_TABLE lista de resultados con información de la cadena (tabla)
  7. REG_TOKENIZE_TABLE lista de no coincidentes información de cadena (dividida por una cadena de separación) (Tabla)
  8. REG_ALLTOKEN_TABLE lista de información de la cadena y la cadena coincidente desajuste (tabla)

secuencias de comandos se puede descargar desde aquí. (Lo siento en japonés)

https://www.ibm.com/developerworks/jp/data/library/db2/j_d-regularexpression/

(Inglés: Machine translation Guión: El último de una página japonesa)

Espero sus comentarios y observaciones.

5

que funciona bien, excepto para DB2 z/OS - en DB2 v10 z/OS debe utilizar PASANDO de la siguiente manera

with val as (
    select t.text 
    from texts t 
    where xmlcast(xmlquery('fn:matches($v,"^[A-Za-z 0-9]*$")' 
        PASSING t.text as "v") as integer) = 0 
    ) 
    select * from val 
4

Comenzando con DB2 11.1 existe soporte de expresiones regulares incorporado. Una de las nuevas funciones es REGEXP_SUBSTR y hay algunas más.

SELECT REGEXP_SUBSTR('hello to you', '.o',1,1) 
    FROM sysibm.sysdummy1 
+0

REGEXP_SUBSTR (al menos) funciona V7R1 en adelante – ATorras

+0

Definitivamente. Gracias por señalar esto. – xenoid