从字符串PostgreSQL中提取值

问题描述 投票:2回答:4

简单的问题

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

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

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

到目前为止,我做到了这一点,但我怀疑这符合我的要求

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

如果我可以告诉它从=符号开始直到结束会有所帮助!

sql postgresql extract
4个回答
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 

2
投票

你可以使用REPLACE

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

DBFiddle Demo


2
投票

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

您可以执行以下操作:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.