gpt4 book ai didi

sql - 使用 SUBSTRING & CHARINDEX 从三个单词名称中显示中间名

转载 作者:行者123 更新时间:2023-12-02 22:06:45 28 4
gpt4 key购买 nike

我有一个表 MsStaff 由几列组成。其中一列是 StaffNameStaffName 数据包含双字姓名(如 'Edy Harsono')和三字姓名(如 'Dian Felita Tanoto' ).我希望有一个列显示我员工的 3 个单词名称中的中间名(即 'Felita')作为结果。

我想通过仅使用 substringcharindex 输入查询来显示结果。

我已经试过了:

select [middlename]=SUBSTRING(staffname,charindex(' ',staffname),charindex(' ',staffname))
from MsStaff

但它只显示 'Feli' 作为结果。出了什么问题,我该怎么办?

最佳答案

我觉得这些要求很奇怪。一:讲师会要求一个解决方案,忽略名称中的许多常见元素和规则的异常(exception)情况(我有两个中间名,我知道很多人没有,而且我知道最后有两个或三个词的人名)。二:他们会限制您使用 CHARINDEXSUBSTRING。三:他们会在没有向您充分解释(或给您时间和资源让您自行学习)您应该如何处理问题的情况下要求您解决这个问题。

总而言之:

DECLARE @t TABLE(StaffName NVARCHAR(255));

INSERT @t
SELECT 'Edy Harsono'
UNION ALL SELECT 'Dian Felita Tanoto'
UNION ALL SELECT 'Lisa Van der Hosen';

SELECT
SUBSTRING
(
StaffName,
CHARINDEX(' ', StaffName)+1,
CHARINDEX(' ', SUBSTRING(StaffName, CHARINDEX(' ', StaffName)+2, 255))
) FROM @t
WHERE LEN(RTRIM(StaffName)) - LEN(REPLACE(RTRIM(StaffName), ' ', '')) = 2;

结果:

Felita

1 row(s) affected.

如果您可以删除 CHARINDEX/SUBSTRING 要求,一个稍微更聪明的方法是:

SELECT PARSENAME(REPLACE(StaffName, ' ', '.'), 2)
FROM @t
WHERE LEN(RTRIM(StaffName)) - LEN(REPLACE(RTRIM(StaffName), ' ', '')) = 2;

关于sql - 使用 SUBSTRING & CHARINDEX 从三个单词名称中显示中间名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16003176/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com