尝试用以下替换您的SQL代码 -
Declare @name varchar(100)
set @name = 'Michael John T. Mac Tavish, Jr.'
SELECT @name as Name,
rtrim(ltrim(substring(@name,1,dbo.pos(@name,' ',2)))) as firstname,
rtrim(ltrim(substring(@name,dbo.pos(@name,' ',2)+1,charindex('.',@name)-dbo.pos(@name,' ',2)))) as MiddleName,
rtrim(ltrim(substring(@name,charindex('.',@name)+1,charindex(',',@name)-charindex('.',@name)-1))) as lastname,
rtrim(ltrim(substring(@name,charindex(',',@name)+1,len(@name)))) as Suffix
功能代码,找出一个字符的第n次出现在字符串 -
CREATE FUNCTION dbo.Pos(@string VARCHAR(MAX),@delim VARCHAR(1),@occur INT)
RETURNS INT
AS
BEGIN
DECLARE @pos int, @counter int, @ret int
SET @pos = CHARINDEX(@delim, @string)
set @counter = 1
if @occur = 1 set @ret = @pos
else
begin
while (@counter < @occur)
begin
select @ret = CHARINDEX(@delim, @string, @pos + 1)
set @counter = @counter + 1
set @pos = @ret
end
end
RETURN @ret
END
但我真的建议你可以重新设计你的问题并提供更多的信息(你的字符串模式,你如何识别提取名称部分的分隔符等)来更有效地解决问题。
你的问题是什么?它不起作用吗?你期望的结果是什么? – qxg
如何将名字“Michael John”,MiddleInitial分隔为“T.”,将姓氏分为“Mac Tavish”,将后缀分为“Jr.”。上面的代码不能正确分离它 – FrostByte91