咱們平常開發過程當中,很是常見的一種需求,把某一個用逗號或者/或者其餘符號做爲間隔的字符串分隔成一張表數據。html
在前面咱們介紹了 [原創]SQL 把表中字段存儲的逗號隔開內容轉換成列表形式,固然按照這種方式轉變一下也是能夠實現的,可是我這裏有之前我一直使用的另一種方式,也記錄一下吧。函數
依照慣例,咱們首先來看看效果。htm
調用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',')blog
具體函數以下:ip
-- =============================================
-- 調用: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','/')
若是朋友們以爲之後可能會用到的話,歡迎轉載,固然也能夠推薦一下,謝謝。 get
PS:此博文是利用Windows Live Writer 2012編寫,格式效果可能不太好。 it