在sql oracle中格式化单个列中的名称

ne5o7dgx  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(346)

我需要帮助。我是新来的。我有个简单的问题。
我的table:

create table employee (name varchar2(30));
insert into employee values ('kevin durant');
insert into employee values ('michael JoRdaN');
insert into employee values (' dWyaNe WAdE');
insert into employee values ('james Harden');
insert into employee values ('pAuL ThomaS AnDersoN');

我想要的格式如下:

Durant K.
Jordan M.
Wade D.
Harden J.
Anderson P.T.

我试过很多方法,但都达不到效果。如何获得所需的输出?

enxuqcxy

enxuqcxy1#

TRIM 将删除前导空格和尾随空格。那么 INITCAP 将每个单词的第一个字母大写,其余字母小写。然后,您可以使用正则表达式将每个名字替换为其缩写,并交换名字和姓氏:

SELECT REGEXP_REPLACE(
         REGEXP_REPLACE(
           INITCAP(TRIM(name)),
           '(\S)\S*\s+',         -- Match a forename with a trailing space
           '\1.'                 -- And replace it with the abbreviation
         ),
         '(.*\.)(.+)',           -- Match the substrings before and after the last
                                 -- full stop
         '\2 \1'                 -- And swap them.
       ) AS Name
FROM   employee

对于您的测试数据,输出:

| NAME          |
| :------------ |
| Durant K.     |
| Jordan M.     |
| Wade D.       |
| Harden J.     |
| Anderson P.T. |

db<>在这里摆弄

相关问题