我们这里先给出题和结果吧,该题目是刚才从网上看到的,很多朋友会问这个答案不是有吗?错,如果仔细看差别就大了,不多说了直接进入主题吧:
这就是我们要做到的,我接下来给出三种方法吧:
方法一:
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,@[email protected]);
IF @0String<>1 or len(@item)>0 begin
SET @[email protected]+1;
insert into @array(item,ID) values(@item,@ID);
end;
set @begin = @[email protected];
set @end=charindex(@分割符,@String,@begin);
end
set @item = substring(@String,@begin,len(@String)[email protected]);
if (len(@item)>0) begin
SET @[email protected]+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,欢迎广大博友们多多指教。
时间: 2024-10-20 08:45:29