2017-03-23 17:13 GMT+01:00 baru gerardi <soyb...@gmail.com>: > Buenos dias > Necesito extraer de un campo de texto los nros de DNI contenidos en él. > Sé que los mismos se encuentran luego de la cadena 'DNI:' > Con substring(texto from 'DNI:') ubico la cadena > pero necesito que liste de ahí en adelante los nros que encuentre, teniendo > en cuenta: > 1. que desconozco cuantos espacios hay entre 'DNI:' y el primer dígito y > 2. que puede haber puntos entre los dígitos
Esa es la tipica tarea para expresiones regulares. Por desgracia tambien es un problema poco especificado. Suponiendo que lo que quieres es buscar - - "DNI:" - seguido por un numero indeterminado de espacios. - seguido por una cadena de digitos que puede tener puntos de separacion en medio. ( y no dices nada de la letra, si son españoles ultimamante la tienen ) Solo con lo de los digitos y puntos: select x, regexp_matches(x, 'DNI:\s*(\d+(?:\.\d+)*)') from regexp_split_to_table('malo/xx DNI: 12 22/yy DNI:12.22.33 zz','/') as t(x); x | regexp_matches --------------------+---------------- xx DNI: 12 22 | {12} yy DNI:12.22.33 zz | {12.22.33} (2 rows) Que puede ser lo que quieres o no, pero de ahi puedes elaborar. En la regexp que hay tenemos, por partes: DNI: - busca eso \s* un numero indeterminado (*) de espacios. ( capturamos \d+ uno o mas (+) digitos (\d) opcionales (?: mas una sub-secuencia compuesta por \. Un punto ( el punto a secas es un comodin ) \d+ y digitos )* fin de subsecuencia, repetida un numero indeterminado de veces. ) fin de captura. Francisco Olarte. > > Desde ya, gracias por la ayuda > Saludos > Baru > > > > -- > lo que está y no se usa nos fulminará - Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org) Para cambiar tu suscripci�n: http://www.postgresql.org/mailpref/pgsql-es-ayuda