如何获取regexp_match返回结果中的第一个匹配文本值?
解法
PostgreSQL 的 text[] 数组类型可直接通过下标取值,默认数组下标从 1 开始计数,你只要在 regexp_match 表达式后追加 [1] 即可取出第一个匹配的文本值,修改后的更新语句如下:
update users set email_base_domain = regexp_match(email, '(\w+\.\w+)$')[1]
补充说明
- 若邮箱格式不符合正则匹配规则,
regexp_match会返回 null,取下标操作不会触发报错,最终写入的字段值也为 null - 如果你需要提取 @ 之后的完整域名(比如
example@mail.foo.com提取出mail.foo.com而非仅foo.com),可以将正则调整为'@(.+)$',同样加[1]即可 - 也可以直接用
substring函数规避数组类型处理,直接返回文本结果:update users set email_base_domain = substring(email from '\w+\.\w+$')
内容的提问来源于stack exchange,提问作者Schwern
相关产品推荐
相关产品推荐

