在单词出现后提取数字

时间:2014-09-15 14:32:10

标签: postgresql

我有一个带有Name列和Log列的表。

Name            Log
Michelle        Bad news travels id 54585 fast.
Lucy            Barking dogs id 545584 seldom bite.
Green           Beauty is in the id 85955 eyes of the beholder.
Gail            Beggars 123 can't be ID 4658 choosers.

我想只从日志列中提取ID数字。输出应该是这样的:

Name        ID
Michelle    54585
Lucy        545584
Green       85955
Gail        4658

我尝试使用以下查询:

select name
     , substring(log from E'^(.*?)[id< ]') as id
from mytable;

但是,我无法获得所需的输出。请注意,单词ID可以大写或不大写。

2 个答案:

答案 0 :(得分:0)

你可以用花哨的正则表达式来做到这一点。这是我使用嵌套调用translate()执行此操作的一种方法:

select translate(col,
                 '0123456789' || translate(col, '0123456789', ''),
                 '0123456789')
from (select cast('asdg sgafadsf 123123 .,sdfa' as varchar(255)) as col) t;

SQL小提琴是here

答案 1 :(得分:0)

SELECT m.name
        , regexp_replace (m.log, e'.* [iI][Dd] ([0-9]*).*', '\1', '') AS id
FROM meuk m
        ;

结果:

INSERT 0 4
   name   |   id   
----------+--------
 Michelle | 54585
 Lucy     | 545584
 Green    | 85955
 Gail     | 4658
(4 rows)