zoukankan      html  css  js  c++  java
  • [原创]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编写,格式效果可能不太好。

  • 相关阅读:
    文件夹无法删除解决方案
    常用Web Service汇总(天气预报、时刻表等)
    浏览器兼容手册
    如何在word2007下右键添加“新建Word 2003 文档”
    Centos7上实现不同网段的服务器文件共享
    ubuntu安装界面 会出现不完整情况
    Centos7搭建dhcp服务器
    Centos7上搭建ftp服务器
    Centos7上配置网络和本地yum方法
    浅谈网络流
  • 原文地址:https://www.cnblogs.com/lhmlyx2723356/p/4227641.html
Copyright © 2011-2022 走看看