你的位置:首页 > 数据库

[数据库]姓名一列拆分成两列,进行以下方法


我们这里先给出题和结果吧,该题目是刚才从网上看到的,很多朋友会问这个答案不是有吗?错,如果仔细看差别就大了,不多说了直接进入主题吧:

这就是我们要做到的,我接下来给出三种方法吧:

方法一:

FUNCTION [dbo].[StrSplit](  
        @String nvarchar(MAX),--待分割字符串  
        @分割符 nvarchar(10)=',',--分割符 
        @0String int=0 --为【1】过滤空字符串 
    )returns @array table(item nvarchar(MAX),ID int)  
    as  
    begin  
        declare @begin int,@end int,@l int,@item nvarchar(MAX) ,@ID int=0;  
        SET @L=LEN(@分割符) 
        set @begin = 1;  
        set @end=charindex(@分割符,@String,@begin);  
        while(@end<>0)  
        begin  
            set @item = substring(@String,@begin,@end-@begin);  
            IF @0String<>1 or len(@item)>0 begin

SET @ID=@ID+1;

insert into @array(item,ID) values(@item,@ID);

end;
            set @begin = @end+@L;
            set @end=charindex(@分割符,@String,@begin);  
        end  
        set @item = substring(@String,@begin,len(@String)+1-@begin);
        if (len(@item)>0) begin

SET @ID=@ID+1;

insert into @array(item,ID) values(@item,@ID);
end; 
        return  
    end

我们一看明显可以看出方法一代码量太大了,不适用由于我就找到了方法二,我对他代码进行组合了可以得到以下方法:

方法二:

select REVERSE(SUBSTRING(REVERSE(name), charindex(' ',REVERSE(name)) , 6)) ,SUBSTRING (name, charindex(' ',name),10)  from D

大家看了方法二觉得已经不错了,完全可以了,但是对于爱好sql的人员来说这个还不是我们想好的,代码量还是过长,于是我想了会给出第三种方案,这个方案自己资料组合:

方法三:

select left(name,(charindex(' ',name)-1)),SUBSTRING (name, charindex(' ',name),1000)  from D

以上方案是我最终给出来的,如果还有更好的sql,欢迎广大博友们多多指教。