[MSSQL] 自己寫SQL Server的Split()函數
雖然網路上已經有很多現成的輪子可以直接拿來套,不過還是自己寫過一遍比較清楚背後原理
CREATE FUNCTION udf_Split
( @Words nvarchar(MAX)/*原始字串*/
, @splitStr varchar(50) /*分割字元*/
)
RETURNS @Result_Table TABLE
(
[word] nvarchar(max) NULL
)
BEGIN
Declare @TempStr nvarchar(MAX)
WHILE (CHARINDEX(@splitStr,@Words)>0)/*@Words有包含分割字元就一直執行迴圈*/
BEGIN
Set @TempStr=SUBSTRING(@Words,1,CHARINDEX(@splitStr,@Words)-1)/*取出最前面的word*/
Insert into @Result_Table (word) Values (@TempStr)
Set @Words = REPLACE(@Words,@TempStr+@splitStr,'')/*把最前面的word加上分割字元後,取代為空字串再指派回給@Words*/
END/*End While*/
IF(LEN(RTRIM(LTRIM(@Words)))>0 And CHARINDEX(@splitStr,RTRIM(LTRIM(@Words)))=0) /*@Words有值但沒有分割字元,表示此為最後一個word*/
Begin
Set @TempStr=@Words /*取出word*/
Insert into @Result_Table (word) Values (@TempStr)
End /*End IF*/
RETURN /*回傳table變數*/
END
呼叫範例:
/*以逗號為區隔的範例*/
Select * from dbo.udf_Split(N'Hello,World,Shadow,你好',',')--四筆資料
Select * from dbo.udf_Split(N'Shadow',',')--一筆資料
Select * from dbo.udf_Split(N'',',')--沒有資料
Select * from dbo.udf_Split(N'first,',',')--一筆資料(但還是建議前端程式傳過來的字串去掉最後一個分割字元比較好)
Select * from dbo.udf_Split(N'first, ',',')--一筆資料(但還是建議前端程式傳過來的字串去掉最後一個分割字元比較好)