如何使用 Postgres 从文本字段中轻松获取首字母

Wal*_*row 4 sql postgresql

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

在某些情况下,我想在我的表中放置姓名首字母而不是该人的全名。

就像是:

Name        | Initials
------------------------
Joe Blow    | J. B.  
Phil Smith  | P. S.  
Run Code Online (Sandbox Code Playgroud)

full_name字段是一个字符串值(显然),我认为最好的方法是将字符串拆分为一个数组 foreach 空间,即:

select full_name, string_to_array(full_name,' ') initials
from my_table
Run Code Online (Sandbox Code Playgroud)

这会产生以下结果集:

Eric A. Korver;{Eric,A.,Korver}
Ignacio Bueno;{Ignacio,Bueno}
Igmar Mendoza;{Igmar,Mendoza}
Run Code Online (Sandbox Code Playgroud)

现在,我唯一缺少的是如何遍历每个数组元素并从中取出第一个字符。我最终会使用substring()来获取每个元素的初始字符 - 但是我只是坚持如何即时循环它们..

任何人都有一个简单的方法来解决这个问题?

kli*_*lin 5

使用unneststring_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)
Run Code Online (Sandbox Code Playgroud)