Postgres Regex返回逗号之前的第一个单词和之后的第一个单词

时间:2017-12-07 20:31:40

标签: regex postgresql

我正在尝试使用正则表达式从列中获取名字和姓氏,但我很难过。

我正在尝试:

select
    substring('SMIRTH JR, DAVID ALLEN', '^[^ ,]+') as namemodified

它应该返回

SMIRTH, DAVID

但它只返回姓氏。我无法弄清楚如何获得两者。

我还需要它来工作:

SMIRTHJR, DAVID ALLEN

因为数据不是很干净。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

使用regexp_matches函数代替substring(假设 Postgresql 9.x):

select
    regexp_matches(regexp_replace('SMIRTHJR, DAVID ALLEN','(JR|SR),', ','), 
                   '([^\s,]+).*?(, [^\s,]+) [^\s,]+$') as namemodified

对于输入字符串SMIRTH, DAVIDSMIRTHJR, DAVID ALLEN

,上述内容将返回SMIRTH JR, DAVID ALLEN