在word id之后提取一些数字

时间:2014-09-15 16:04:31

标签: postgresql

我有一个带有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;

但是,我无法获得所需的输出。

1 个答案:

答案 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号。