【发布时间】:2021-09-28 02:13:09
【问题描述】:
我正在尝试使用 SQL Server 将全名拆分为 Prefix、First Name、Middle Name 和 Last Name。
我尝试了以下方法,但由于所需的输出不正确,因此无法正常工作。
代码
SELECT TOP 10
ID,
FullName,
SUBSTRING(FullName, CHARINDEX(' ', FullName) + 1, LEN(FullName)) AS Full_Name,
SUBSTRING(FullName, 1, CHARINDEX(' ', FullName)) AS Prefix,
SUBSTRING(FullName, CHARINDEX(' ', FullName), LEN(FullName) - CHARINDEX(' ', REVERSE(FullName)) - CHARINDEX(' ', FullName) + 1) FirstName,
RIGHT(FullName, CHARINDEX(' ', REVERSE(FullName)) - 1) AS Last_Name,
LEN(SUBSTRING(FullName, CHARINDEX(' ', FullName), LEN(FullName) - CHARINDEX(' ', REVERSE([FullName)) - CHARINDEX(' ', FullName) + 1)) AS FirstNameChar
FROM
Names WITH (NOLOCK)
WHERE
(FullName LIKE 'Mr %' OR
FullName LIKE 'Mrs %' OR
FullName LIKE 'Miss %' OR
FullName LIKE 'Ms %' OR
FullName LIKE 'Dr %')
当前输出:
| ID | FullName | Prefix | FirstName | Last_Name | FirstNameChar |
|---|---|---|---|---|---|
| 123456 | Mr s t Fenech | Mr | s t | Fenech | 4 |
需要的输出:
| ID | FullName | Prefix | FirstName | Middle_Name | Last_Name | FirstNameChar |
|---|---|---|---|---|---|---|
| 123456 | Mr s t Fenech | Mr | s | t | Fenech | 1 |
我想删除名字和姓氏之前的空格,可以看到 FirstNameChar 是 4 而实际上应该是 1 并且还能够拆分中间名。
有人可以帮忙吗?
参考stackoverflow上的问题: SQL- Get the substring after first space and second space in separate columns
SQL: parse the first, middle and last name from a fullname field
【问题讨论】:
-
简单的答案是,你不知道。 Falsehoods Programmers Believe About Names这个问题已经被问过很多次了,事实是,除非你问这个人他们的名字是怎么分开的,否则你总是会弄错的。
-
停止使用nolock 溅出你的代码
标签: sql-server parsing substring charindex