我正在使用 Postgres 版本 9.4 并且我有一个full_name
表中的字段。
在某些情况下,我想在表中输入姓名的首字母而不是全名。
就像是:
Name | Initials
------------------------
Joe Blow | J. B.
Phil Smith | P. S.
The full_name
field 是一个字符串值(显然),我认为最好的方法是将字符串拆分为一个数组 foreach 空间,即:
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()
获取每个元素的初始字符 - 但是我只是卡在如何动态循环它们上。
有人有一个简单的方法来解决这个问题吗?
Use unnest
with 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)
在 Postgres 14+ 中你可以替换unnest(string_to_array(...))
with string_to_table(...)
.
测试一下数据库小提琴。 https://dbfiddle.uk/YDYto5uY
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)