姓名一列拆分成两列,进行以下方法

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

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

方法一:

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,欢迎广大博友们多多指教。

 

 

 

转载于:https://www.cnblogs.com/lqLove/p/5732273.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值