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

在前面我们介绍了 [原创]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编写,格式效果可能不太好。

[原创]SQL表值函数:把用逗号分隔的字符串转换成表格数据的更多相关文章

  1. [原创]SQL 表值函数:获取从今天计算起往前自定义天数

    PS:此博文是利用Windows Live Writer 2012编写,格式效果可能不太好. 在我开发过程中,遇到一个统计需求,结果是要求返回从当天起往回推算出自定义输入的天数 为此我写了一个表值函数 ...

  2. [原创]SQL表值函数:获取从当月计算起往前自定义月份数

      今天我现在发现看一篇博文不能够太长,只要能够描述清楚自己想表达的东西,能够让大家知道你要讲什么就行了.因为我今天看了一些长篇博文,真的觉得知识点太多了, 会让人囫囵吞枣. 这篇博文跟我昨天发表的类 ...

  3. 逗号分隔的字符串转成表格参与IN条件查询

    返回值为'1,2,3,4,5,6,7',是一个字符串,如果要用IN 查询的话sql认为这是一个完整的字符串,需要将内容分隔转换变成table 定义函数如下: create Function sysfS ...

  4. [原创]SQL表值函数:返回自定义时间段的日期数据

    跟以往类似,我依旧介绍一个我日常开发遇到的知识点,谨此记录一下,也希望能帮助到一些朋友. 这次我要介绍的是通过SQL函数返回你输入的两个时间点内的日期数据. 效果图如下: 执行函数:SELECT * ...

  5. [原创]SQL表值函数:返回从当前周开始往回的自定义周数

    一如往常一样,一篇简短博文记录开发过程中遇到的一个问题.初衷都是记录自己的一些Idea,也是希望能够帮助一些凑巧遇到此类需求的问题,这个需求的的开端是因为,要统计最近N周的销售数据. 接下来我们来看看 ...

  6. SQL Split函数,将一串字符串返回成table

    写法一: CREATE FUNCTION [dbo].[Split] ( @str VARCHAR(MAX), --传进来的字符串 ) --分割符 ) RETURNS @t TABLE --定义一个虚 ...

  7. [转]在Sql Server中将字符串分割成表格数据示例

    本文转自:http://www.lmwlove.com/ac/ID718 比如我们有一个字符串 ) select @appName ='UserID=admin,Account=ABC' 然后我们要以 ...

  8. 把以逗号分隔的字符串转换成list

    /** * 把省的字符串转换成列表 * * @param province * @return */ private List<String> getProvinceList(String ...

  9. SQL表值函数和标量值函数的区别

    SQL表值函数和标量值函数的区别 写sql存储过程经常需要调用一些函数来使处理过程更加合理,也可以使函数复用性更强,不过在写sql函数的时候可能会发现,有些函数是在表值函数下写的有些是在标量值下写的, ...

随机推荐

  1. Kattis - fairdivision 【贪心】

    题意 有一堆人 要给他们的朋友 买一个生日礼物,然后 每个人 给出自己的最大负担额度 并且给出礼物总价 然后要给出一种解决方案 尽量让 所有人的支出都接近平均,如果实在无法平均,那就让 先来的人 多处 ...

  2. IOS UI Frame 相对位置调整 与优化方法 Height Width X Y 调整

    不使用xib ,纯代码开发的过程中,动态UI  需要改对象的大小位置 反复使用CGRectMake 去 setFrame  非常低效耗时,而且 牵一发动全身. 以下整理出几个方法,方便动态布局 1.s ...

  3. hadoop1.2.1 datanode 由于权限无法启动 expected: rwxr-xr-x

    /************************************************************ STARTUP_MSG: Starting DataNode STARTUP ...

  4. MySQL 创建索引(Create Index)的方法和语法结构及例子

    MySQL 创建索引(Create Index)的方法和语法结构及例子 MySQL 创建索引(Create Index)的方法和语法结构及例子   CREATE INDEX Syntax CREATE ...

  5. ImportError: no module named win32api

    ImportError: no module named win32api 安装win32包就好了 pip install pypiwin32

  6. screen&tmux快捷键

    screen Key 快捷键 Action 动作 Notes 备注 Ctrl+a c new window 新窗口   Ctrl+a n next window 下一个窗口 I bind F12 to ...

  7. java深入探究06

    Tomcat中获取资源文件: ServletContext().getRealPath(/WEB-INF/classes/db.properties);//获取资源文件的在服务器中的绝对路径 Serv ...

  8. C# Stopwatch与TimeSpan详解

    http://www.cnblogs.com/newstart/archive/2012/09/21/2696884.html

  9. 关于jvm中的常量池和String.intern()理解

    1. 首先String不属于8种基本数据类型,String是一个对象. 因为对象的默认值是null,所以String的默认值也是null:但它又是一种特殊的对象,有其它对象没有的一些特性. 2. ne ...

  10. JavaScript基础挖掘目录

    前端基础进阶(一):内存空间详细图解 前端基础进阶(二):执行上下文详细图解 前端基础进阶(三):变量对象详解 前端基础进阶(四):详细图解作用域链与闭包 前端基础进阶(五):全方位解读this 前端 ...