将lastname,firstname和middleinitial转换为SQL中的不同列
将lastname,firstname和middleinitial转换为SQL中的不同列
我目前有一个名为PersonFullName的列。它的数据如下所示:
PERSONFULLNAME Doe, John A Doe, Jane M Doe, Eric
我想以以下格式获取数据:
姓氏 - 名字 - 中间名 DOE - John - A DOE - Jane - M Doe - Eric
以下代码可以正确显示,但如果添加一个中间名,中间名会被放在名字列中。
declare @last as varchar(20) declare @first as varchar(20) declare @mid as varchar(20) declare @name varchar(100) select @name = 'Leake, Angela' set @last = substring(@name, 1,charindex(', ',@name)-1) set @first = LTRIM(substring(@name, charindex(' ',@name),len(@name)-charindex(' ',@name)+1)) set @mid = RIGHT(@name, CHARINDEX(' ', REVERSE(@name))-1) If (@mid=@first) SET @mid='' select @last as '姓氏', @first as '名字',@mid as '中间名' Select PERSONFULLNAME FROM Kronos
问题出现的原因:
根据对话内容,问题的出现是因为数据表Kronos中的PERSONFULLNAME字段存储了姓、名和中间名的完整姓名,需要将其拆分为不同的列。
解决方法:
对话中提供了一个使用CTE(公共表表达式)和PARSENAME函数的解决方法。首先,使用CTE计算每个姓名中空格的数量,然后使用PARSENAME函数将姓名拆分为姓、名和中间名,并将结果存储在不同的列中。
以下是解决方法的代码:
WITH CTE AS ( SELECT PERSONFULLNAME, LEN(PERSONFULLNAME)-LEN(REPLACE(PERSONFULLNAME,' ','')) N FROM Kronos ) SELECT PERSONFULLNAME, PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N) 'First Name', PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N+1) 'Last Name', PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N-1) 'MI' FROM CTE
文章如下:
问题的出现和解决方法
在学习SQL的过程中,我遇到了一个问题:将姓、名和中间名从一个名为Kronos的数据表的PERSONFULLNAME字段中拆分到不同的列中。幸运的是,我找到了一个解决方法。以下是解决方法的代码:
WITH CTE AS
(
SELECT PERSONFULLNAME,
LEN(PERSONFULLNAME)-LEN(REPLACE(PERSONFULLNAME,' ','')) N
FROM Kronos
)
SELECT PERSONFULLNAME,
PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N) 'First Name',
PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N+1) 'Last Name',
PARSENAME(REPLACE(PERSONFULLNAME,' ','.'),N-1) 'MI'
FROM CTE
在这个解决方法中,我使用了CTE(公共表表达式)和PARSENAME函数。首先,我使用CTE计算了每个姓名中空格的数量,然后使用PARSENAME函数将姓名拆分为姓、名和中间名,并将结果存储在不同的列中。
这个解决方法对于我在Kronos时间记录系统中的需求非常有效。我之前在该数据库中玩过,并记得在[PERSON]表中姓名已经被拆分了。虽然我只能访问一个带有执行凭据的链接服务器和为我创建的存储过程,但由于人力资源/财务SOX标准的限制,我只能看到这些。此外,数据是在一年前以其当前格式创建的。现有的多个自动化程序都是基于当前的格式构建的。因此,现在我必须在我的数据库中创建自己的格式以适应新系统(我现在有一个链接服务器)。
遗憾的是,他们不愿意给我完全的权限,这使得我的工作变得更加困难。但我正在努力解决这个问题。目前,在我们的网站上,我几乎将所有系统都以某种形式链接在一起,只剩下库存系统了。希望能尽快解决这个问题。
文章完。