首页 > 解决方案 > 在 SELECT 语句中将名称拆分为多个部分

问题描述

我似乎找不到关于将字符串拆分为我需要的部分的现有帖子。我在 SQL Server 中有一个数据库字段,其中包含“LastName FirstName MI”(没有逗号,只是分隔人名每个部分的空格)。我有以下 SQL 来获取名字和姓氏,但不知道如何获取中间名或中间名。

前任。能源部约翰 B

SELECT
    RTRIM(LEFT([PATIENT_NAME], CHARINDEX(' ', [PATIENT_NAME]))) AS LastName,
    SUBSTRING([PATIENT_NAME], CHARINDEX(' ', [PATIENT_NAME]) + 1, LEN([PATIENT_NAME])) AS FirstName
FROM
    Clients

结果是:

如何在此SELECT语句中仅返回没有中间名首字母的名字并从该字符串中获取“B”作为中间名?

标签: sqlsql-servertsql

解决方案


您可以取正确的 1 个字符,也可以将字符串反转为取第一个字符。

SELECT RIGHT(LTRIM(RTRIM([Patient_Name])), 1) AS Middle_Initial

SELECT LEFT(REVERSE(LTRIM(RTRIM([Patient_Name]))), 1) AS Middle_Initial

至于从你的名字字符串中删除 MI,我会找到字符串的长度并取左边的 N-2 个字符,或者我会对空间进行字符索引,然后取那么多字符。把它们放在一起:

DECLARE @name VARCHAR(100) = 'Smith David M      ' 

--Clean the string of leading/trailing whitespace
SELECT LTRIM(RTRIM(@name)) AS name_cleaned

--Find the first space to parse out the last name
SELECT CHARINDEX(' ', @name) AS first_space

--Select all chars before the first space
SELECT LEFT(LTRIM(RTRIM(@name)), CHARINDEX(' ', @name)-1) AS last_name

--Find the next space, use the starting location as the previous space and add 1
SELECT CHARINDEX(' ', @name, 7) AS second_space

--Select all chars between the spaces
SELECT SUBSTRING(@name, CHARINDEX(' ', @name)+1, CHARINDEX(' ', @name, 7) - CHARINDEX(' ', @name)) AS first_name

--Select the right most char for middle initial
SELECT RIGHT(LTRIM(RTRIM(@name)), 1) AS middle

推荐阅读