从字符串中提取值 PostgreSQL

Extract Value from a string PostgreSQL

简单的问题

我在字符串字段中有以下类型的结果

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

如何从字符串中提取值,该值可以在 5-8 位数字之间变化

到目前为止我这样做了,但我怀疑这是否符合我的要求

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

如果我能告诉它从 = 符号开始直到结束,那将会有所帮助!

您可以使用 REPLACE:

SELECT col, REPLACE(col, 'Number=', '')
FROM tab;

DBFiddle Demo

基于这个问题: Split comma separated column data into additional columns

您可能会执行以下操作:

SELECT *, split_part(col, '=', 2)
FROM table;

另一种适合您规格(trim 7 个前导字符)的简单解决方案是 right():

right(str, -7)

演示:

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 

您可以使用 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

Rextester Demo