Necesito dividir una cadena de la siguiente manera, cuando intento con split_part sin suerte

select split_part('8 HAMPSHIRE RD',' ',2)    

Salida esperada: HAMPSHIRE RD

2
Harinath Arasu 18 jul. 2017 a las 14:15

2 respuestas

La mejor respuesta

Utilice regexp_replace():

select regexp_replace('8 HAMPSHIRE RD', '.*?\s', '');

 regexp_replace 
----------------
 HAMPSHIRE RD
(1 row)

Una solución alternativa que utiliza funciones de manipulación de cadenas:

with my_table(str) as (
    values ('8 HAMPSHIRE RD')
)
select right(str, -strpos(str, ' '))
from my_table;

Si desea omitir la primera palabra si solo contiene dígitos, debe usar \d (dígito) en lugar de . (cualquier carácter):

select regexp_replace('8 HAMPSHIRE RD', '\d*?\s', '');
2
klin 18 jul. 2017 a las 12:01

Una solución más económica sin una expresión regular:

SELECT substring (
          '8 HAMPSHIRE RD'
          FROM position(' ' IN '8 HAMPSHIRE RD') + 1
       );
1
Laurenz Albe 18 jul. 2017 a las 11:31