我正在尝试使用正则表达式从文本列中提取子字符串,但在某些情况下,字符串中存在该子字符串的多个实例。
在这些情况下,我发现查询不会返回子字符串的第一次出现。有谁知道我做错了什么?
例如:
如果我有这个数据:
create table data1
(full_text text, name text);
insert into data1 (full_text)
values ('I 56, donkey, moon, I 92')
我在用
UPDATE data1
SET name = substring(full_text from '%#"I ([0-9]{1,3})#"%' for '#')
我想要得到'I 56'
not 'I 92'
您可以使用regexp_matches()
反而:
update data1
set full_text = (regexp_matches(full_text, 'I [0-9]{1,3}'))[1];
由于没有传递额外的标志,regexp_matches()
只返回第一个匹配项 - 但它返回一个数组,因此您需要从结果中选择第一个(也是唯一一个)元素(即[1]
part)
将更新限制为仅与正则表达式匹配的行可能是一个好主意:
update data1
set full_text = (regexp_matches(full_text, 'I [0-9]{1,3}'))[1]
where full_text ~ 'I [0-9]{1,3}'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)