Pregunta simple

Tengo el siguiente tipo de resultados en un campo de cadena

'Number=123456'
'Number=1234567'
'Number=12345678'

¿Cómo extraigo el valor de la cadena con respecto a que el valor puede cambiar entre 5-8 cifras

Hasta ahora hice esto, pero dudo que se ajuste a mis requisitos.

SELECT substring('Size' from 8 for ....

Si puedo decirle que comience desde el signo = hasta el final, ¡eso ayudaría!

2
Tito 8 sep. 2018 a las 12:40

3 respuestas

La mejor respuesta

Otra solución simple que se ajusta a sus especificaciones (recorte 7 caracteres principales) es con right ():

right(str, -7)

Demo:

SELECT str, right(str, -7)
FROM (
   VALUES ('Number=123456')
        , ('Number=1234567')
        , ('Number=12345678')
   ) t(str);

       str       |  right
-----------------+----------
 Number=123456   | 123456
 Number=1234567  | 1234567
 Number=12345678 | 12345678 
2
Erwin Brandstetter 8 sep. 2018 a las 10:27

Puede usar regexp_matches:

with t(str) as
(
 select 'Number=123456'   union all 
 select 'Number=1234567'  union all
 select 'Number=12345678' union all
 select 'Number=12345678x9' 
)
select t.str  as "String", 
       regexp_matches(t.str, '=([A-Za-z0-9]+)', 'g')  as "Number"
  from t;

String            Number
--------------    ---------
Number=123456     123456
Number=1234567    1234567
Number=12345678   12345678
Number=12345678x9 12345678x9 
--> the last line shows only we look chars after equal sign even if non-digit

Demo de Rextester

2
Barbaros Özhan 8 sep. 2018 a las 21:40

Basado en esta pregunta: Dividir datos de columnas separadas por comas en columnas adicionales

Probablemente podría hacer lo siguiente:

SELECT *, split_part(col, '=', 2)
FROM table;
2
Evaldas Buinauskas 8 sep. 2018 a las 09:45