自訂MSSQL函式 - Split()

  • 4025
  • 0
  • SQL
  • 2011-03-14

摘要:自訂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',',')