有時候資料呈現會用符號串起,像是"aaa,bbb,ccc",那我們在串資料的時候,會比較不方便

在比較新版的MSSQL 似乎已經有split的函數,但舊版的我們就會需要自己寫囉

 

我之前在網路上查到的語法,直接執行沒有問題

也因為都沒有問題,所以也不曾改過,但仍覺得這是一個值得紀錄的語法

是個很方便的工具程式

 

image

 

執行結果如下

image

 

文字語法如下

CREATE FUNCTION [dbo].[FN_STRING_SPLIT]
( @Words nvarchar(MAX) /*原始字串*/
, @splitStr varchar(50) /*分割字元*/
)
RETURNS @Result_Table TABLE
(
  [word] nvarchar(max) NULL ,
  [seq] bigint ,
  [cnt] bigint
)
BEGIN
  Declare @count bigint
  Declare @TempStr nvarchar(MAX)
  set @count=0
  /* 字串若有有包含分割字元(@splitStr)就一直執行迴圈 */
  WHILE (CHARINDEX(@splitStr,@Words)>0)
    BEGIN
      set @count=@count+1
      /* 取出最前面的字串 */
      Set @TempStr=SUBSTRING(@Words,1,CHARINDEX(@splitStr,@Words)-1)
      Insert into @Result_Table Values (@TempStr,@count,0)
      /* 把最前面的字串加上分割字元後,取代為空字串 */
      Set @Words = REPLACE(@Words,@TempStr+@splitStr,'')
  END
  /*字串有值但沒有分割字元,表示此為最後一個word*/
  IF(LEN(RTRIM(LTRIM(@Words)))>0 And CHARINDEX(@splitStr,RTRIM(LTRIM(@Words)))=0)
    Begin
      set @count=@count+1
      set @TempStr=@Words
      Insert into @Result_Table Values (@TempStr,@count,0)
      update @Result_Table set cnt = @count;
    End
  RETURN
END

 

arrow
arrow
    文章標籤
    SQL MSSQL split
    全站熱搜

    我的暱稱 發表在 痞客邦 留言(0) 人氣()