首页 > 解决方案 > 子字符串应该返回不同的值

问题描述

我有一个这样的名称列:

Name
------
Roger
RogerMan
Roger That

我需要一个查询,它会从列中返回不同的首字母。例如,在这种情况下,我想返回:

Name
-----
R
RM
RT

为此,我尝试了多种方法: 1. CASE 语句(到目前为止效果很好)。2. STRCMP 3. 子串

但是,我正在寻找一种使用 Postgres 中的函数的更动态的方法。

标签: sqlpostgresqlplpgsql

解决方案


您可以使用regexp_replace()从字符串中删除所有非大写字母字符,如下所示:

 regexp_replace(name, '[^A-Z]', '', 'g')

DB Fiddle 上的演示

with t(name) as (
    select 'Roger'
    union all select 'RogerMan'
    union all select 'Roger That'
)
select name, regexp_replace(name, '[^A-Z]', '', 'g') initials from t
姓名 | 缩写
:--------- | :--------
罗杰 | R       
罗杰曼 | R M      
罗杰那 | 逆转录      

推荐阅读