从字符串中提取值 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;
基于这个问题:
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
简单的问题
我在字符串字段中有以下类型的结果
'Number=123456'
'Number=1234567'
'Number=12345678'
如何从字符串中提取值,该值可以在 5-8 位数字之间变化
到目前为止我这样做了,但我怀疑这是否符合我的要求
SELECT substring('Size' from 8 for ....
如果我能告诉它从 = 符号开始直到结束,那将会有所帮助!
您可以使用 REPLACE
:
SELECT col, REPLACE(col, 'Number=', '')
FROM tab;
基于这个问题: 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