postgresql 如何将“姓名”列拆分为“名”和“姓”两个

5rgfhyps  于 2022-12-03  发布在  PostgreSQL
关注(0)|答案(1)|浏览(173)

“name”列可以有复合名称,我想用PostgreSQL中的一个查询以这种方式将它们分开,因此它应该保持不变:
它应保持不变:

我尝试了此查询,但当姓名中包含“mrs”或“ms”时,查询不分离

SELECT substring(name from 1 for (POSITION(' ' IN name))) "first_name" 
      ,substring(name from (POSITION(' ' IN name))+1) "last_name"
FROM flores_comahue fc
htrmnn0y

htrmnn0y1#

我会先清理掉不想保留的内容(比如MRS.MD),然后拆分得到的字符串:

select elements[1] as first_name, 
       elements[2] as last_name
from (       
  select regexp_split_to_array(regexp_replace(name, '\s*(MRS.|MR.|MD)\s*', '', 'g'), '\s+') as elements
  from flores_comahue
) t

regexp_replace()可以扩展,以删除更多的标题或“噪音”。
我使用regexp_split_to_array()而不是string_to_array()来处理使用多个空格来分隔单词的值。
Online example

相关问题