SQL--字符串转table

转载 2015年07月09日 15:45:27

SQL 的存储过程或着自定义函数,有时候,我们希望类似传递一个数组的对象给这个存储过程或着自定义函数.

但是 SQL 并不支持数组的输入参数。

这时候,我们一般是传递一个合并后的字符串给存储过程,然后在存储过程中解析这个字符串。

这个技术,很多地方都有收集,今天在  Arrays and Lists in SQL Server http://www.sommarskog.se/arrays-in-sql.html  看到一个经典的总结。这个地方涉及到的一些总结函数,我就不再提到了。非常感谢 Erland Sommarskog, SQL Server MVP.

给了我们这个丰富的,SQL 中如何处理数组的总结。

下面把一段字符串解析成Guid数组的SQL自定义函数,上述文章中并没有提供,我是改写自其中的 iter_charlist_to_table 自定义函数来实现的。

郭红俊提供的SQL自定义函数调用范例如下:

select * from iter_uniqueidentifierlist_to_table(
'
0E099B0F-AFE3-4FCA-B634-014DF91AA79B,
7EF06D1D-081D-4957-97A1-015CAA4B00E7,
B18BD78B-77F5-4AA9-A3B8-016776176924,
BB1E54BE-BB91-4FE4-8267-0234BD798A1D,
B74FC01A-F33E-4CF3-8B79-02391D5E89BD,
94DE017F-0C7E-4750-94CD-0266C38C4D71,
CF94841D-87D3-4792-A886-0269745796A6'
,',')

这个自定义函数的实现如下:

    --
   -- http://www.sommarskog.se/arrays-in-sql.html
   --
   -- 把一个字符串组成的 uniqueidentifier 列表转换成一个 table
  
   CREATE FUNCTION iter_uniqueidentifierlist_to_table
                    (@list      ntext,
                     @delimiter nchar(1) = N',')
         RETURNS @tbl TABLE (listpos int IDENTITY(1, 1) NOT NULL,
                             guidID     uniqueidentifier NOT NULL) AS

   BEGIN
      DECLARE @pos      int,
              @textpos  int,
              @chunklen smallint,
              @tmpstr   nvarchar(4000),
              @leftover nvarchar(4000),
              @tmpval   nvarchar(4000),
              @id uniqueidentifier

      SET @textpos = 1
      SET @leftover = ''
      WHILE @textpos <= datalength(@list) / 2
      BEGIN
         SET @chunklen = 4000 - datalength(@leftover) / 2
         SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
         SET @textpos = @textpos + @chunklen

         SET @pos = charindex(@delimiter, @tmpstr)

         WHILE @pos > 0
         BEGIN
            SET @tmpval = left(ltrim(rtrim(@tmpstr)), @pos - 1)
            SET @tmpval = replace(@tmpval,char(9),'')
            SET @tmpval = replace(@tmpval,char(10),'')
            SET @tmpval = replace(@tmpval,char(13),'')
            -- print( @tmpval)
            set @id = convert(uniqueidentifier,@tmpval);
            INSERT @tbl (guidID) VALUES(@id)
           
            SET @tmpstr = substring(@tmpstr, @pos + 1, len(@tmpstr))
            SET @pos = charindex(@delimiter, @tmpstr)
         END

         SET @leftover = @tmpstr
      END
   -- print @leftover
            SET @leftover = ltrim(rtrim(@leftover))
            SET @leftover = replace(@leftover, char(9),'')
            SET @leftover = replace(@leftover, char(10),'')
            SET @leftover = replace(@leftover, char(13),'')
            set @id = convert(uniqueidentifier,@leftover);
            INSERT @tbl (guidID) VALUES(@id)

   RETURN
   END

将lua中字符串转换成table,富文本

char* str = ((char*)  tolua_tostring(tolua_S,1,0));   {    lua_newtable(tolua_S);    if (str == NULL...
  • lujunhua45365362
  • lujunhua45365362
  • 2014年03月29日 00:29
  • 2417

Lua里实现将table转成字符串(序列化)和将字符串转换回table(反序列化)

[cpp] view plaincopy --[[    file name :    table序列化和反序列化的问题.lua    author  :      ...
  • u011240067
  • u011240067
  • 2015年03月10日 15:21
  • 2901

【Lua学习笔记】 --> 《字符串string与table的函数操作》

Lua的字符串string、table的函数操作
  • JY_95
  • JY_95
  • 2016年02月12日 23:07
  • 1426

lua中将表转成json格式的字符串

经常要用 Lua 处理 JSON 格式的字符串,于是写了一个可以从 Lua 中的 table 生成 JSON 格式字符串的方法,虽有重造轮子之嫌,但自己写的这一小段代码在工作中更实用一些(其实主要原因...
  • u011240067
  • u011240067
  • 2015年03月07日 18:39
  • 2392

C#无需第三方插件实现json和table互转

C# 数据库查询结果table转化为json字符串,或反向把json字符串转换为DataTable数据集合 以下代码经实践简单可用。转换通用类定义:using System; using System...
  • oLinBSoft
  • oLinBSoft
  • 2016年05月28日 17:08
  • 5369

lua里table转string(序列化)和string转table(反序列化)

网上找到的代码,非常完美,出处已经不可查,见谅 function serialize(obj) local lua = "" local t = type(obj) ...
  • Eddids
  • Eddids
  • 2015年04月27日 15:04
  • 4605

jquery插件-table转Json数据插件

今天在群:Jquery插件交流, 群号是346717337中,有同学问道是否有jquery 把table 数据转换成json的插件。 网上搜索确实有这样的插件 方法1:自己用jquery写...
  • my98800
  • my98800
  • 2016年10月14日 08:49
  • 1195

实战:sqlserver 2012 扩展事件-XML转换为标准的table格式

sqlserver 2012 扩展事件将XML转换为table格式
  • yangzhawen
  • yangzhawen
  • 2014年12月25日 18:38
  • 2857

MySQL Create Table语句的应用与语法

以下的文章主要介绍的是MySQL Create Table语句的实际用法与MySQL Create Table语句的基本语法的介绍,如果你对其具体的操作步骤感兴趣的话,你就可以对以下的文章来一个“大阅...
  • weiyuefei
  • weiyuefei
  • 2016年04月14日 20:26
  • 510

浮点数转化为字符串

(1)在不调用库函数的情况下,把浮点数转化为字符串的难点就在,把小数转化为字符串。因为浮点数的精度问题,当我们对浮点数进行乘10操作的时候,浮点数尾数数值可能就会发生变化,如float a=12.10...
  • lijiang1991
  • lijiang1991
  • 2016年04月26日 16:31
  • 4934
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQL--字符串转table
举报原因:
原因补充:

(最多只允许输入30个字)