繁体   English   中英

SQL Server - 从名称列表中获取首字母

[英]SQL Server - Getting initials from a list of names

我有一个表格,其中包含分配给某个项目的员工列表。 有点像这样:

ID  Employees
122 Mark Doe
210 John Doe
212 Julie Doe, Yuri Doe

我必须转换“雇员”列以获取名字的首字母并获取完整的姓氏。 结果应该是这样的:

ID  Employees
122 M. Doe
210 J. Doe
212 J. Doe, Y. Doe

当值包含多个名称时会出现问题。 为此可以做些什么?

PostgreSQL 的解决方案。 假设单元格中的多个名称始终由逗号和后面的空格分隔,您可以


1 将所有多名称单元格展开成单独的行
2 将带有名称的列拆分为代表名字和姓氏的单独列
3 从名字中提取第一个字母并将其与姓氏连接


CREATE TABLE employees (id int, employee VARCHAR(50))
INSERT INTO employees (id, employee)
VALUES 
(122, 'Mark Doe'),
(210, 'John Doe'),
(212, 'Julie Doe, Yuri Doe');
 
 SELECT
 id
 ,left(split_part(firs_last_name,' ',1),1) || '. ' || split_part(firs_last_name,' ',2) 
 as  wanted_name
 ,split_part(firs_last_name,' ',1) as first_name
 ,split_part(firs_last_name,' ',2) as last_name
 FROM
   (
   Select 
   id, unnest(string_to_array(employee, ', ')) as firs_last_name
    FROM employees
   ) s

|  id | wanted_name | first_name | last_name |
|-----|-------------|------------|-----------|
| 122 |      M. Doe |       Mark |       Doe |
| 210 |      J. Doe |       John |       Doe |
| 212 |      J. Doe |      Julie |       Doe |
| 212 |      Y. Doe |       Yuri |       Doe |

如果您想在单元格中恢复多个名称,您可以在最后一步中将它们聚合

CREATE TABLE employees (id int, employee VARCHAR(50))
INSERT INTO employees (id, employee)
VALUES 
(122, 'Mark Doe'),
(210, 'John Doe'),
(212, 'Julie Doe, Yuri Doe');
 
 with transformed_names as 
 (SELECT
 id
 ,left(split_part(firs_last_name,' ',1),1) || '. ' || 
  split_part(firs_last_name,' ',2)  as  wanted_name
 ,split_part(firs_last_name,' ',1) as first_name
 ,split_part(firs_last_name,' ',2) as last_name
 FROM
   (
   Select 
   id ,unnest(string_to_array(employee, ', ')) as firs_last_name
   FROM employees
   ) s)

SELECT
id
, string_agg(wanted_name, ', ') as wanted_names  
from transformed_names
GROUP BY 
id

|  id |     string_agg |
|-----|----------------|
| 122 |         M. Doe |
| 210 |         J. Doe |
| 212 | J. Doe, Y. Doe |

但话又说回来,这一切都取决于表中干净一致的数据

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM