从字符串PostgreSQL提取值

时间:2018-09-08 09:40:14

标签: sql postgresql extract

简单问题

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

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

关于值可以在5到8位之间变化的方式,我该如何从字符串中提取值

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

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

如果我可以告诉它从=号开始,直到最后将有所帮助!

4 个答案:

答案 0 :(得分:2)

您可以使用REPLACE

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

DBFiddle Demo

答案 1 :(得分:2)

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

您可能可以执行以下操作:

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

答案 2 :(得分:2)

另一种适合您的规格(修剪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 

答案 3 :(得分:2)

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