`
jackleechina
  • 浏览: 589803 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

在SQL中实现数组(转)

    博客分类:
  • sql
 
阅读更多
在SQL中实现数组(转)T-SQL象数组一样处理字符串、分割字符串    在日常的编程过程中,数组是要经常使用到的。在利用SQL对数据库进行操作时,有时就想在SQL使用数组,比如将1,2,3,4,5拆分成数组。可惜的是在T-SQL中不支持数组。不过还是有变通的办法。我们可以自己编写两函数Get_StrArrayLength(取得字符串的长度-元素的个数)和Get_StrArrayStrOfIndex(按指定符号分割字符串,返回分割后指定索引的第几个元素)。有了这两个函数,我们就可以非常方便的在T-SQL中处理形如1,2,3,4,5这样的字符串了。

    T-SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦。下边的函数,实现了象数组一样去处理字符串。

一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。
CREATE function Get_StrArrayLength
(
@str varchar(1024),  --要分割的字符串
@split varchar(10)  --分隔符号
)
returns int
as
begin
  declare @location int
  declare @start int
  declare @length int
  set @str=ltrim(rtrim(@str))
  set @location=charindex(@split,@str)
  set @length=1
   while @location<>0
     begin
      set @start=@location+1
      set @location=charindex(@split,@str,@start)
      set @length=@length+1
     end
   return @length
end

调用示例:select dbo.Get_StrArrayLength('78,1,2,3',',')

返回值:4

二、按指定符号分割字符串,返回分割后指定索引的第几个元素,象数组一样方便

CREATE function Get_StrArrayStrOfIndex
(
@str varchar(1024),  --要分割的字符串
@split varchar(10),  --分隔符号
@index int --取第几个元素
)
returns varchar(1024)
as
begin
declare @location int
declare @start int
declare @next int
declare @seed int
set @str=ltrim(rtrim(@str))
set @start=1
set @next=1
set @seed=len(@split)
set @location=charindex(@split,@str)
while @location<>0 and @index>@next
   begin
    set @start=@location+@seed
    set @location=charindex(@split,@str,@start)
    set @next=@next+1
   end
if @location =0 select @location =len(@str)+1

--这儿存在两种情况:1、字符串不存在分隔符号 2、字符串中存在分隔符号,跳出while循环后,@location为0,那默认为字符串后边有一个分隔符号。
return substring(@str,@start,@location-@start)
end

调用示例:select dbo.Get_StrArrayStrOfIndex('8,9,4',',',2)

返回值:9

三、结合上边两个函数,象数组一样遍历字符串中的元素

declare @str varchar(50)
set @str='1,2,3,4,5'
declare @next int 
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
   begin
     print dbo.Get_StrArrayStrOfIndex(@str,',',@next)
     set @next=@next+1
   end

调用结果:
1
2
3
4
5

摘自:http://hi.baidu.com/clxiu/item/d4c3853fd8ff6d84b611db20
分享到:
评论

相关推荐

    在SQL Server中实现数据的数组式读取.pdf

    "在SQL Server中实现数据的数组式读取" 标题:“在SQL Server中实现数据的数组式读取” 描述:在SQL Server中实现数据的数组式读取.pdf 标签:“SQL 数据库 数据处理 参考文献 专业指导” 在SQL Server中实现...

    在SQL存储过程中进行参数数组Array Parameter的处理函数

    在SQL Server中,存储过程是预编译的SQL语句集合,它们允许开发人员封装复杂的数据库操作,并且可以接受输入参数来实现灵活的数据处理。在某些情况下,我们需要一次性处理多个值,而不是单个参数,这就是参数数组...

    Transact-SQL和PL_SQL中二维数组的模拟.pdf

    这些方法可以有效地实现数组的基本操作,如初始化、赋值和取值,并能够将数据关系映射到字符串的存储结构上。对于PL/SQL来说,尽管它没有直接提供二维数组的支持,但可以通过集合类型来模拟一维数组的操作。不过,...

    sql.rar_SQL 数组

    2. **创建SQL语句**:在SQL查询中,你可以使用`IN`关键字配合`(@p1, @p2, ..., @pn)`来处理数组中的元素。但由于参数化的限制,你不能直接将数组传入SQL,而是需要构造一个动态的SQL语句。这里我们可以使用字符串...

    仿制简单的SQL select查询语句,用于对二维数组的查询,建立环境-Excel Vba,可移植到VB环境中

    '仿制简单的SQL查询语句,用于对二维数组的查询 '参照SQL语句:Select * From array [Where conditions] [Distinct fields] [ResultWithTitle] ' '实现功能: ' 依条件设置查询数组,返回包含查询字段(或全部字段)...

    一个基于SQL server 2005实现的通过一个数组参数进行Procedure的parameter传递例子

    在SQL Server中,我们不能直接定义一个数组类型的参数。然而,可以通过创建表类型变量或者使用XML类型来模拟数组的行为。表类型变量允许我们将多个值作为单个参数传递,而XML类型则可以用来序列化一组值。 2. **...

    sql_clr调用c#生成数组函数

    例如,找出数组中的最大值: ```csharp public static int FindMax(int[] values) { int max = int.MinValue; foreach (int value in values) { if (value &gt; max) { max = value; } } return max; } ``` 3....

    sql 解析字符串为数组,根据索引,获得数组的值

    sql通用函数, 解析字符串为数组,根据索引,获得数组的值

    在SQL Server中模拟数据的数组式存储.pdf

    通过动态执行CREATE TABLE命令和UPDATE命令,实现了数据的数组式存储在SQL Server中。这有利于在循环语句中实现数据的规律性、大批量存取。 关键技术要点: 1. 动态执行CREATE TABLE命令和UPDATE命令 2. 使用...

    Java中实现数组反转与数据库去重的深度整合

    本文详细介绍了Java中实现数组反转的几种方法,并探讨了数据库去重的多种技术。通过合理选择和实现这些技术,可以有效地提升程序的性能和数据处理的准确性。无论是在内存中处理数组还是在数据库中处理数据集,去重都...

    spring+dwr+Extjs+sql2008的数组传递grid

    标题中的“spring+dwr+Extjs+sql2008的数组传递grid”是指一个集成应用,使用了Spring框架、Direct Web Remoting (DWR)技术、ExtJS前端框架以及SQL Server 2008数据库,实现了从后端服务器向前端Grid组件传递数据的...

    一个byte数组与字符串转化类库

    这个类库可以实现 1.转换一个String字符串为byte数组 2.将字节数组转化为String类型的数据 3.转换一个int为byte数组 4.从字节数组中指定的位置读取一个Integer...6.从字节数组中指定的位置读取一个Short类型的数据

    PB脚本中SQL语句写法与SQL中语句写法对照

    在SQL语言中,可以使用Update表名Set字段名=case字段名when值1then值2else值三endFrom表名Where条件语句来实现条件语句的写法。 四、取余函数Mod() 在PB脚本中,可以使用Mod(要取余数的值,取余值)函数来实现取余数...

    asp.net中后台c#数组与前台js数组交互

    前台JS数组需要从后台C#数组中获取数据,而后台C#数组则需要从数据库中获取数据。下面我们将详细介绍如何实现这个交互。 定义CS数组 在ASP.NET中,后台程序中需要定义一个公共的数组来存放数据。在这里,我们定义...

    最好用的Python连接Mysql库文件,防止SQL注入,可用数组编写SQL

    Python在与MySQL数据库交互时,通常会使用各种库来实现高效、安全的连接。本篇文章将详细介绍如何使用Python连接MySQL数据库,并重点讲解如何防止SQL注入、利用数组编写SQL以及处理高并发场景,确保数据安全。 首先...

    php中实现用数组妩媚地生成要执行的sql语句

    本文将介绍一个在PHP中使用数组生成SQL语句的方法,以及对这个方法的一些优化和注意事项。 首先,来看给定的`array_to_sql`函数,它的主要功能是根据输入的数组、操作类型(insert或update)和需要排除的字段,自动...

    取数组中重复文本下标.rar

    在"易语言取数组中重复文本下标源码"中,实现的算法应该与此类似,但它会具体到易语言的语法。源码可能包含了循环、条件判断以及哈希表或列表的操作,用以存储和比较元素的索引。源码的详细实现可能包括了自定义函数...

    sqlserver转PG经验总结及PG的一些特性

    ### SQL Server 转 PostgreSQL 经验总结及 PostgreSQL 特性 #### 一、SQL Server 到 PostgreSQL 的数据类型映射 在进行 SQL Server 数据库迁移至 PostgreSQL 的过程中,一个重要的步骤是确保数据类型的正确映射。...

    将数组存入数据库

    4. **数组转二进制**:在实际操作中,我们需要一个函数将数组转换为二进制格式。这通常涉及到将每个元素转换为字节流,然后组合成一个大的字节数组。这个过程可能会根据不同的编程环境有所不同,但基本思路是遍历...

Global site tag (gtag.js) - Google Analytics