有時候資料呈現會用符號串起,像是"aaa,bbb,ccc",那我們在串資料的時候,會比較不方便
在比較新版的MSSQL 似乎已經有split的函數,但舊版的我們就會需要自己寫囉
我之前在網路上查到的語法,直接執行沒有問題
也因為都沒有問題,所以也不曾改過,但仍覺得這是一個值得紀錄的語法
是個很方便的工具程式
執行結果如下
文字語法如下
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
留言列表