我有一个带有Name列和Log列的表。
Name Log
Michelle Bad 222 news travels id 54585 fast.
Lucy Barking 333 dogs id 545584 seldom bite.
Green Beauty is 444 in the id 85955 eyes of the beholder.
Gail Beggars 123 can't be ID 4658 choosers.
我想只从日志列中提取ID数字。请注意,单词ID可以大写或不大写。因此,输出应该是这样的:
Name ID
Michelle 54585
Lucy 545584
Green 85955
Gail 4658
我尝试使用以下查询:
select name
, substring(log from E'^(.*?)[id< ]') as id
from mytable;
但是,我无法获得所需的输出。
答案 0 :(得分:0)
这些方面的东西应该有效。由于您没有提供CREATE TABLE和INSERT语句,因此我只在公用表表达式中使用了一行。
with data as (
select 'Michelle' as name, 'Bad 333 id 54342 wibble' as log
)
select name, substring(substring(log::text, '((id|ID) [0-9]+)'), '[0-9]+')
from data
where log::text ~* 'id [0-9]+';
嵌套substring()
调用首先返回id号和字符串'id',然后只返回id号。