• [原创]SQL表值函数:把用逗号分隔的字符串转换成表格数据


    我们日常开发过程中,非常常见的一种需求,把某一个用逗号或者/或者其他符号作为间隔的字符串分隔成一张表数据。

    在前面我们介绍了 [原创]SQL 把表中字段存储的逗号隔开内容转换成列表形式,当然按照这种方式转变一下也是可以实现的,但是我这里有以前我一直使用的另外一种方式,也记录一下吧。

    依照惯例,我们首先来看看效果。

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

    image

    具体函数如下:

    -- =============================================
    -- 调用: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编写,格式效果可能不太好。

  • 相关阅读:
    确定查询各阶段消耗的时间
    mysql 处理查询请求过程
    如何获取有性能问题的SQL
    索引优化策略
    CXF支持 SOAP1.1 SOAP1.2协议
    MYSQL 基于GTID的复制
    poj2056
    poj2049
    poj1033
    poj1221
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/4227641.html
Copyright © 2020-2023  润新知