2017-03-23 17:13 GMT+01:00 baru gerardi <[email protected]>:
> 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 ([email protected])
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda