我有一个带有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可以大写或不大写。
答案 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)