我正在使用Postgres 9.4版,并且full_name在表中有一个字段。
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()来获取每个元素的初始字符- 但是,我只是停留在如何动态循环遍历它们的问题上。
substring()
有人有简单的方法吗?
unnest搭配使用string_agg:
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)