/*
一、按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串中存在多少个分隔符号,然后再加一,就是要求的结果。

-----rtrim(@str)去掉 @str右边的字符 ltrim(@str)去掉左边的字符 ltrim(rtrim(@str))去掉左右空格

-------charindex  在变量@str中@split的index即索引值

create function Get_StrArrayLength
(
@str varchar(5000), --要分割的字符串
@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

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

create function Get_StrArrayStrOfIndex
(
@str varchar(5000), --要分割的字符串
@split varchar(10), --分隔符号
@index int --取第几个元素
)
returns varchar(5000)
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
return substring(@str,@start,@location-@start)
end

调用示例

--==================================
declare @str varchar(5000)
set @str='1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48'
print dbo.Get_StrArrayLength(@str,',')
declare @next int
declare @s varchar(100)
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
print dbo.Get_StrArrayStrOfIndex(@str,',',@next) ----输出数组中的值
set @next=@next+1
end
--==================================

四、检查一个元素是否在数组中

Create function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns int
as
begin
declare @str varchar(5000)
set @str=@sArr
declare @next int
declare @ret int
set @ret=0
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
if dbo.Get_StrArrayStrOfIndex(@str,',',@next)=@s
begin
set @ret=1;
end
set @next=@next+1
end
return @ret
end -- =========调用失利========
declare @a int
set @a=dbo.CheckStrInArr('8','2,3,5,8')
select @a
-- =========调用失利========

五 检查一个元素是否与数组中的相匹配

--select dbo.CheckStrLikeInArr(2,'d','sde,df,aad,d,fgsa,fgd')
Create function CheckStrLikeInArr
(
@liketype int=0, --like类型(0为为@keyword%,2为) 一般只用0
@keyword as varchar(50), --要检查的关键字
@sArr as varchar(5000) --数组
)
returns nvarchar(max)
as
begin
declare @str varchar(5000)
set @str=@sArr
declare @start int
declare @result nvarchar(max)
set @result=''
set @start=1
declare @temp nvarchar(20);
while @start<=dbo.Get_StrArrayLength(@str,',')
begin
if @liketype=0
begin
set @temp=dbo.Get_StrArrayStrOfIndex(@str,',',@start);
if @temp like '%'+ @keyword+'%'
begin
set @result=@result+ @temp +',';
end
set @start=@start+1
end
else if @liketype=1
begin if dbo.Get_StrArrayStrOfIndex(@str,',',@start) like ''+ @keyword +'%'
begin
set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';
end
set @start=@start+1
end
else if @liketype=2
begin if dbo.Get_StrArrayStrOfIndex( @str, ',' , @start) like '%'+ @keyword+''
begin
set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';
end
set @start=@start+1
end
end
return @result
-- return cast(dbo.Get_StrArrayLength(@result,',')as nvarchar(2000))
end

SQL字符串转换为数组的更多相关文章

  1. PHP文本处理之中文汉字字符串转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen - 获取字符串的长度 mb_sub ...

  2. PHP文本处理 中文汉字字符串 转换为数组

    在PHP中我们可以通过str_split 将字符串转换为数组,但是却对中文无效,下面记录一下个人将中文字符串转换为数组的方法. 用到的PHP函数 mb_strlen — 获取字符串的长度 functi ...

  3. 微信开发所需要的的方法(签名认证、数组转字符串方法、将xml字符串转换为数组、发送xml请求方法)

    //将xml字符串转换为数组 public function xmlToArray($xml){ $array_data = json_decode(json_encode(simplexml_loa ...

  4. SQL处理数组,字符串转换为数组

    原文转载自:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413 一.按指定符号分割字符串,返回分割后的元素个数,方法很简单,就是看字符串 ...

  5. 【Java面试题】17 如何把一个逗号分隔的字符串转换为数组? 关于String类中split方法的使用,超级详细!!!

    split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回. stringObj.split([separator],[limit])参数:stringObj   必选项.要被分解的 ...

  6. mysql下将分隔字符串转换为数组

    MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用. 现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗 ...

  7. eval()将json 字符串转换为数组

    json ={ GW:[{id:"655",mc:"董事"},{id:"656",mc:"书记"},{id:" ...

  8. PHP 数组转字符串,与字符串转数组

    implode 使用一个字符串将数组变成字符串 <?php $array = array('lastname', 'email', 'phone'); $comma_separated = im ...

  9. json对象与字符串的相互转换,数组和字符串的转换

    1.json对象转换为字符串 JSON.stringify(value [, replacer] [, space])  var student = new Object(); student.id ...

随机推荐

  1. newinstance()和new有什么区别?(转)

    在初始化一个类,生成一个实例的时候:newInstance() 和 new 有什么区别? 用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有 ...

  2. SQL Server管理员专用连接的使用

    原文:SQL Server管理员专用连接的使用 作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情 ...

  3. linux基于学习

    1.还有一个文件名前".",它代表的文件""隐藏文件". 2.chgrp:改变文件所属用户组 chown:改变文件全部者 chmod:改变文件的权限 ...

  4. 栈上分配存储器的方法 alloca 抽样

    声明一个局部变量,必须分配在堆栈上,但有或没有它的方法 当然,,那是 alloca 下面的代码显示了可变长度参数转换,alloca 要使用 int main(int argc, char ** arg ...

  5. Cocos2d-X 使用CCTableView创建滚动视图

    CCTableView和CCScrollView如创建滚动视图,CCTableView该函数将是更,制造更多麻烦 实例1:使用CCTableView创建滚动视图 首先创建一个TableView类 Ta ...

  6. 配置Tomcat出现Unsupported major.minor version 51.0

    在配置tomcat时,配置好jdk1.6,下载的tomcat8.0,结果执行start-up.bat,总是一闪而过,网上查了大量的资料,都说是可能是jdk没配置好,但实际上jdk的环境变量设置正常,后 ...

  7. 创建内向交货单 BBP_INB_DELIVERY_CREATE

    DATA:DEL_HEADER TYPE BBP_INBD_L. DATA:DEL_TAB TYPE TABLE OF BBP_INBD_D WITH HEADER LINE. DATA:DEL_RE ...

  8. 跳转表C语言,不比redis版本号

    本来跳表的原理很easy的(相对于红 - 黑树),但国庆间歇性地搞5天才捞起来-- 我学会了跳之前写表的链式结构完全基于,我看着写的过程中redis实现,它的每个键列都是用数组来表示的.细致想了想发现 ...

  9. Java重写round()方法

    题目:完毕这种方法的代码实现 public static String round (String arg1, int arg2) 參数 arg1:表示等待被处理的数据:如:"100.286 ...

  10. hdoj1010Starship Troopers (树dp,依赖背包)

    称号:hdoj1010Starship Troopers 题意:有一个军队n个人要占据m个城市,每一个城市有cap的驻扎兵力和val的珠宝,并且这m个城市的占率先后具有依赖关系,军队的每一个人能够打败 ...