一尘不染

如何使用Postgres轻松地从文本字段中获取缩写

sql

我正在使用Postgres 9.4版,并且full_name在表中有一个字段。

在某些情况下,我想在表中放入姓名的缩写而不是该人的全名。

就像是:

Name        | Initials
------------------------
Joe Blow    | J. B.  
Phil Smith  | P. S.

full_name字段是一个字符串值(很明显),我认为解决此问题的最佳方法是将字符串拆分为每个空间的数组,即:

select full_name, string_to_array(full_name,' ') initials
from my_table

这将产生以下结果集:

Eric A. Korver;{Eric,A.,Korver}
Ignacio Bueno;{Ignacio,Bueno}
Igmar Mendoza;{Igmar,Mendoza}

现在,我唯一缺少的是如何遍历每个数组元素并将第一个字符拉出。我最终将使用substring()来获取每个元素的初始字符-
但是,我只是停留在如何动态循环遍历它们的问题上。

有人有简单的方法吗?


阅读 159

收藏
2021-05-23

共1个答案

一尘不染

unnest搭配使用string_agg

select full_name, string_agg(substr(initials, 1,1)||'.', ' ') initials
from (
    select full_name, unnest(string_to_array(full_name,' ')) initials
    from my_table
    ) sub
group by 1;

       full_name        |  initials   
------------------------+-------------
 Phil Smith             | P. S.
 Joe Blow               | J. B.
 Jose Maria Allan Pride | J. M. A. P.
 Eric A. Korver         | E. A. K.
(4 rows)
2021-05-23