Solución:
Usar regexp_replace es más simple:
# select regexp_replace('test1234test45abc', '[^0-9]+', '', 'g');
regexp_replace
----------------
123445
(1 row)
los ^
medio not
, por lo que cualquier personaje que sea no en el rango 0-9
será reemplazado por una cadena vacía, ''
.
los 'g'
es una bandera que significa que se reemplazarán todas las coincidencias, no solo la primera.
Para modificar cadenas en PostgreSQL, consulte la sección Funciones y operadores de cadenas de la documentación. Función substring(string from pattern)
utiliza expresiones regulares POSIX para la coincidencia de patrones y funciona bien para eliminar diferentes caracteres de su cadena.
(Tenga en cuenta que el VALUES
La cláusula dentro de los paréntesis es solo para proporcionar el material de ejemplo y puede reemplazarlo en cualquier momento. SELECT
declaración o tabla que proporciona los datos):
SELECT substring(column1 from '(([0-9]+.*)*[0-9]+)'), column1 FROM
(VALUES
('ggg'),
('3,0 kg'),
('15 kg.'),
('2x3,25'),
('96+109')
) strings
La expresión regular explicada en partes:
-
[0-9]+
– la cadena tiene al menos un número, ejemplo:'789'
-
[0-9]+.*
– la cadena tiene al menos un número seguido de algo, ejemplo:'12smth'
-
([0-9]+.*)*
– la cadena similar a la línea anterior cero o más veces, ejemplo:'12smth22smth'
-
(([0-9]+.*)*[0-9]+)
– la cadena de la línea anterior cero o más veces y al menos un número al final, ejemplo:'12smth22smth345'