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

Responder a