关于SQLserver 存储过程 如何切割一个字符串 转化为数组

如果我想把一个字符串“0,231,1,54,2”转成数组,输出结果为
0
231
1
54
2
求代码求注解

第1个回答  推荐于2016-11-08
Create Function [dbo].[Split](@Sql varchar(8000),@Splits varchar(10))
returns @temp Table (a varchar(100))
As
Begin
Declare @i Int
Set @Sql = RTrim(LTrim(@Sql))
Set @i = CharIndex(@Splits,@Sql)
While @i >= 1
Begin
Insert @temp Values(Left(@Sql,@i-1))
Set @Sql = SubString(@Sql,@i+1,Len(@Sql)-@i)
Set @i = CharIndex(@Splits,@Sql)
End
If @Sql <> ''
Insert @temp Values (@Sql)
Return
End追问

能不能一行一行的解释下。。

追答

@sql为整个要分隔的字符串,@splits为用来分隔字符串的字符,如你例子中的逗号

去掉字符串变量左右空白
获取第一个分隔字符所在字符中的索引位置@i
while循环,一直到@i=0结束,因为索引为0的话说明字符串中已不存在分隔符
循环体内,将分隔符之前的字符串插入临时表@temp中
然后将字符串去掉索取分隔符位置之前的部分,
然后继续取得第二个分隔符的索引位置,直至循环结束
当循环结束,也就是字符串中已不存在分隔符,那么就剩下最后一段需要分隔的字符了
那么直接插入临时表中,最后返回这个临时表即可

本回答被提问者和网友采纳
第2个回答  2013-03-13
Tsql里边没有数组,你转来怎么存?用数组不如拿出串后,在程序里转,多方便啊追问

什么意思...

关于SQLserver 存储过程 如何切割一个字符串 转化为数组
Create Function [dbo].[Split](@Sql varchar(8000),@Splits varchar(10))returns @temp Table (a varchar(100))As Begin Declare @i Int Set @Sql = RTrim(LTrim(@Sql))Set @i = CharIndex(@Splits,@Sql)While @i >= 1 Begin Insert @temp Values(Left(@Sql,@i-1))Set @Sql = ...

关于oracle 存储过程 如何切割一个字符串 转化为字符数组,然后遍历该数 ...
Lv_Changed_String := Substr(Lv_Changed_String,Instr(Lv_Changed_String, Pv_i_Identifier, 1, 1) + 1,Length(Lv_Changed_String));END LOOP;-- 3.最有一个被拆分出来的字符串中不含标识符 IF NOT Lv_Changed_String IS NULL THEN -- 将最后一个保存 Pt_o_Array(Pt_o_Array.Count +...

如何给SQLSERVER存储过程传递数组参数
1、将数组转换为字符串格式(例如:a,b,c,d)2、在数据库内创建字符串分割为行的表值函数 3、若是需要将一个二维数组传递的话,需要将每列数据都格式化为1的方式,然后再用2的方式转换为行,再将转换后的数据组合为一个表 4、你就可以直接进行插入、编辑、删除或查询操作了。

SQL SERVER里面如何在存储过程里面获取另一个存储过程所返回的表的...
你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。 二、存储过程的调用 之前已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程...

解剖SQLSERVER第十五篇SQLSERVER存储过程的源文本存放在哪里_百度知 ...
我们为了要找到存储过程的位置,我在存储过程里故意使用“SELECT ‘AABBCC’ 这个字符串以便于我们能够容易的找到存储过程的所在位置:我们找到了:好了,我们现在代码是存储在数据库里面。数据存储在偏移位置为0x00101AF0 的数据文件里。十进制值是01055472。我们知道数据页面是8KB,我们可以计算代码所在的页面编号01055472 \/...

【SQL】存储过程中如何定义数组?
存储过程里定义不了数组。如果是sqlserver,那么你可以用表变量,游标来实现你的功能。如果是sqlserver2005以上的版本,可以做clr存储过程,那里面是可以用数组的。 本回答由电脑网络分类达人 郭强推荐 举报| 答案纠错 | 评论 5 0 mwtcz 采纳率:45% 擅长: C\/C++ C#\/.NET 乒乓球 地下城与勇士 为...

SQLserver存储过程如何拼接列?
select cast(ac1 as varchar(3))+'-'+cast(ac2 as varchar(3))+'-'+cast(ac3 as varchar(3))from a 你如果想要加入ac0 就要做一个表的关联 如 from a T0 inner join b T1 on T0.id=T1.id

一个Mysql的字符串查询问题
我理解楼主的要求是在要判断给定str字段是否只包含[a]或[b]或[c]或[d],或这几个字符串组合,而不包含其它字符串组合。以第一个查询为例,简单的解释一下上边查询的意思。正则表达式就是单引号引起来的部分。[.[.]表示左方括号,[.].]表示右方括号,这是mysql正则表达式的固定用法,不必深究。...

convert函数如何将数据库中日期转化成字符串呀
XXXXXX..Format("SELECT * FROM [mytable] WHERE xdate='%s'",m_times)

C#中使用SQLServer的方法
1、添加引用 using System.Data.SqlClient;2、建立连接调用 SqlConnection myConnection = new SqlConnection("数据库连接字符串");\/\/数据库连接字符串通常是Data Source=localhost;Initial Catalog=数据库名;User ID=用户名;Password=密码 SqlCommand myCommand = new SqlCommand(); myCommand.Comma...

相似回答