如何使用 REGEXP sql 从字符串中仅提取 5 位数字

Posted

技术标签:

【中文标题】如何使用 REGEXP sql 从字符串中仅提取 5 位数字【英文标题】:How to extract only 5 digit number from a string using REGEXP sql 【发布时间】:2017-01-06 19:43:34 【问题描述】:

我只需要在 postgresql 或 redshift DB 中使用 REGEXP sql 从字符串中提取 5 位数字

例如,

f 34 123 54321 123456

上面的字符串应该返回

54321

我只能从字符串中获取数字,而不仅仅是 5 位数字

select REGEXP_REPLACE('f 34 123 54321 123456', '[^0-9]') five_digit_number
--returns 3412354321123456

【问题讨论】:

【参考方案1】:

使用regexp_matches

select regexp_matches('f 34 123 54321 123456','\y\d5\y','g')

指定'g' 标志为您提供所有匹配项,以防字符串中出现超过一个 5 位数字。

\y 指定单词边界。

对于 Redshift,您可以使用 regexp_substr

select REGEXP_SUBSTR('f 34 123 54321 123456', '(^|[^[:word:]]|[[:space:]])\\d5([^[:word:]]|[[:space:]]|$)')

【讨论】:

我收到ERROR: 42883: function regexp_matches("unknown", "unknown") does not exist 你使用的是哪个版本的 postgres? 我使用 redshift db... REGEXP_REPLACE 有效,但不是这个 让我们continue this discussion in chat。

以上是关于如何使用 REGEXP sql 从字符串中仅提取 5 位数字的主要内容,如果未能解决你的问题,请参考以下文章

如何从repo文件中仅提取已启用的存储库?

如何在sql语句中使用正则表达式

从熊猫数据框中仅提取数字和字符串

如何从 XML 中仅提取标签名称(而不是值),最终使用 XPath

regexp_substr 提取字符串中的度量单位

Teradata SQL从中文数字字母混合字符串中只提取数字regexp_substr