我們這裡先給出題和結果吧,該題目是剛纔從網上看到的,很多朋友會問這個答案不是有嗎?錯,如果仔細看差別就大了,不多說了直接進入主題吧: 這就是我們要做到的,我接下來給出三種方法吧: 方法一: 我們一看明顯可以看出方法一代碼量太大了,不適用由於我就找到了方法二,我對他代碼進行組合了可以得到以下方法: 方 ...
我們這裡先給出題和結果吧,該題目是剛纔從網上看到的,很多朋友會問這個答案不是有嗎?錯,如果仔細看差別就大了,不多說了直接進入主題吧:
這就是我們要做到的,我接下來給出三種方法吧:
方法一:
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,歡迎廣大博友們多多指教。