gpt4 book ai didi

sql - 从 regexp_matches 结果中获取第二个匹配项

转载 作者:行者123 更新时间:2023-11-29 14:30:48 28 4
gpt4 key购买 nike

我有一个 name 列,如下所示:

'1234567 - 7654321 - some - more - text'

我需要得到一个字符串"7654321"。我坚持以下几点:

SELECT regexp_matches('1234567 - 7654321 - some - more - text', '\d+', 'g');

regexp_matches
----------------
{1234567}
{7654321}

(2 rows)

我如何得到我想要的?也许有比 regexp_matches 更好的选择 - 很乐意考虑。谢谢!

最佳答案

您可以使用 REGEXP_REPLACE:

SELECT REGEXP_REPLACE('1234567 - 7654321 - some - more - text', '^\d+[^\d]+(\d+).*$', '\1');

输出

7654321

此正则表达式查找以一些数字 (^\d+) 开头,后跟一些非数字字符 ([^\d]+) 和然后是另一组数字 ((\d+)),后跟一些字符,直到字符串结尾 (.*$)。第二组数字字符周围的 () 使其成为捕获组,然后我们可以在替换字符串中使用 \1 引用它。由于 REGEXP_REPLACE 仅替换字符串中与正则表达式匹配的部分,因此有必要使用与整个 字符串匹配的正则表达式,以便仅用所需数据替换它.

更新

如果第一组数字之前可能有字符,则应将正则表达式更改为

^[^\d]*\d+[^\d]+(\d+).*$

更新 2

如果开头可能只有一组数字,我们必须将匹配的第一部分设为可选。我们可以使用非捕获组来做到这一点:

^[^\d]*(?:\d+[^\d]+)?(\d+).*$

这使得第一组数字的匹配是可选的,因此如果它不存在(即只有一组数字),正则表达式仍然会匹配。通过使用非捕获组(将 ?: 添加到组的开头,我们不需要更改 \1 中的替换字符串。更新的 SQLFiddle

关于sql - 从 regexp_matches 结果中获取第二个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52178844/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com