摘要:自訂MSSQL函式 - Split()
在使用了C#的Split方法之後,再回到SqlServer2005時,總是會寫下Select Split('Hello,world',',')這樣的語句,滿心希望能夠得到'Hello'和'world'這兩個字符串,但是一次次的失落,讓我萌 生了自定義Split()函數的方法。在完成自定義方法的過程中,發現,C#中的Split()方法,其返回值是數組,而SQL2005中又該以什麼樣的 方式來組織呢:我首先想到的是以表格的形式返回。確定了返回格式,再確定參數,因為是參照C#中的Split()方法,所以參數有兩個分別是:源字符串, 和分隔字符串。
--SQLServer2005 fnc_Split()方法
Create function [dbo].[fnc_split]
(
@OriginalStr nvarchar(4000),
@SplitChar nvarchar(1000)
)
--定義函數的回傳值類型為:Table
returns @temp table(splitValue nvarchar(1000))
As
Begin
declare @index int
declare @s nvarchar(1000)
--通過While迴圈得到分隔之後的字串
while(1=1)
Begin
--取得分隔字串在來源字中的位置
set @index=charindex(@SplitChar,@OriginalStr)
if @index=0
begin
insert into @temp(splitValue) values(@OriginalStr)
break;
End
--借助於Left函數將來源字串截斷
set @s=left(@OriginalStr,@index-1)
insert into @temp(splitValue) values(@s)
set @OriginalStr=Right(@OriginalStr,len(@OriginalStr)-@index)
End
return
End
測試:使用上述函數分隔'Hello,world'
--使用fnc_split函數,呼叫時一定要加上函數的架構名(dbo),否則呼叫時無法完成
Select * From dbo.fnc_split('Hello,world',',')