我們日常開發過程中,非常常見的一種需求,把某一個用逗號或者/或者其他符號作為間隔的字符串分隔成一張表數據。
在前面我們介紹了 [原創]SQL 把表中字段存儲的逗號隔開內容轉換成列表形式,當然按照這種方式轉變一下也是可以實現的,但是我這里有以前我一直使用的另外一種方式,也記錄一下吧。
依照慣例,我們首先來看看效果。
調用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',')
具體函數如下:
-- ============================================= -- 調用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',') -- Create date: <Create Date,,> -- Description: 把用逗號分隔的字符串轉換成表格數據 -- ============================================= CREATE FUNCTION [dbo].[Fn_StringSplitToTable] ( @StringX varchar(MAX), @Split nvarchar(10) ) RETURNS @IdsTable TABLE ( [Id] nvarchar(200) ) AS BEGIN DECLARE @Index int DECLARE @LenIndex int SET @LenIndex=LEN(@Split) SET @Index=CHARINDEX(@Split,@StringX,1) WHILE (@Index>=1) BEGIN IF(LEFT(@StringX,@Index-1) <> '') INSERT INTO @IdsTable SELECT LTRIM(RTRIM(LEFT(@StringX,@Index-1))) SET @StringX=RIGHT(@StringX,LEN(@StringX)-@Index-@LenIndex+1) SET @Index=CHARINDEX(@Split,@StringX,1) END IF(@StringX<>'') INSERT INTO @IdsTable SELECT LTRIM(RTRIM(@StringX)) RETURN END
以上調用是用逗號隔開,如果您的字符串是用/號隔開,直接修改調用字符串就行了。
-- 調用:SELECT Id FROM [Fn_StringSplitToTable]('1/12/36/65/58/56/DF','/')如果朋友們覺得以后可能會用到的話,歡迎轉載,當然也可以推薦一下,謝謝。
PS:此博文是利用Windows Live Writer 2012編寫,格式效果可能不太好。
新聞熱點
疑難解答