[原創]SQL表值函數:把用逗號分隔的字符串轉換成表格數據

 

咱們平常開發過程當中,很是常見的一種需求,把某一個用逗號或者/或者其餘符號做爲間隔的字符串分隔成一張表數據。html

在前面咱們介紹了 [原創]SQL 把表中字段存儲的逗號隔開內容轉換成列表形式,固然按照這種方式轉變一下也是能夠實現的,可是我這裏有之前我一直使用的另一種方式,也記錄一下吧。函數

依照慣例,咱們首先來看看效果。htm

調用:SELECT Id FROM [Fn_StringSplitToTable]('1,12,36,65,58,56,DF',',')blog

image

具體函數以下: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

相關文章
相關標籤/搜索