原文转载自:http://hi.baidu.com/gagahjt/item/fd081316450f05028ebde413

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

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

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

  1. create function Get_StrArrayLength
  2. (
  3. @str varchar(5000), --要分割的字符串
  4. @split varchar(10) --分隔符号
  5. )
  6. returns int
  7. as
  8. begin
  9. declare @location int
  10. declare @start int
  11. declare @length int
  12.  
  13. set @str=ltrim(rtrim(@str))
  14. set @location=charindex(@split,@str)
  15. set @length=1
  16. while @location<>0
  17. begin
  18. set @start=@location+1
  19. set @location=charindex(@split,@str,@start)
  20. set @length=@length+1
  21. end
  22. return @length
  23. end

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

  1. create function Get_StrArrayStrOfIndex
  2. (
  3. @str varchar(5000), --要分割的字符串
  4. @split varchar(10), --分隔符号
  5. @index int --取第几个元素
  6. )
  7. returns varchar(5000)
  8. as
  9. begin
  10. declare @location int
  11. declare @start int
  12. declare @next int
  13. declare @seed int
  14.  
  15. set @str=ltrim(rtrim(@str))
  16. set @start=1
  17. set @next=1
  18. set @seed=len(@split)
  19.  
  20. set @location=charindex(@split,@str)
  21. while @location<>0 and @index>@next
  22. begin
  23. set @start=@location+@seed
  24. set @location=charindex(@split,@str,@start)
  25. set @next=@next+1
  26. end
  27. if @location =0 select @location =len(@str)+1
  28. return substring(@str,@start,@location-@start)
  29. end

调用示例

  1. declare @str varchar(5000)
  2. 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'
  3. print dbo.Get_StrArrayLength(@str,',')
  4. declare @next int
  5. declare @s varchar(100)
  6. set @next=1
  7. while @next<=dbo.Get_StrArrayLength(@str,',')
  8. begin
  9. print dbo.Get_StrArrayStrOfIndex(@str,',',@next) ----输出数组中的值
  10. set @next=@next+1
  11. end

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

  1. Create function CheckStrInArr(@s as varchar(50),@sArr as varchar(5000)) returns int
  2. as
  3. begin
  4. declare @str varchar(5000)
  5. set @str=@sArr
  6. declare @next int
  7. declare @ret int
  8. set @ret=0
  9. set @next=1
  10. while @next<=dbo.Get_StrArrayLength(@str,',')
  11. begin
  12. if dbo.Get_StrArrayStrOfIndex(@str,',',@next)=@s
  13. begin
  14. set @ret=1;
  15. end
  16. set @next=@next+1
  17. end
  18. return @ret
  19. end
  20.  
  21. -- =========调用示例========
  22. declare @a int
  23. set @a=dbo.CheckStrInArr('','2,3,5,8')
  24. select @a
  25. -- =========调用示例========

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

  1. --select dbo.CheckStrLikeInArr(2,'d','sde,df,aad,d,fgsa,fgd')
  2. Create function CheckStrLikeInArr
  3. (
  4. @liketype int=0, --like类型(0为为@keyword%,2为) 一般只用0
  5. @keyword as varchar(50), --要检查的关键字
  6. @sArr as varchar(5000) --数组
  7. )
  8. returns nvarchar(max)
  9. as
  10. begin
  11. declare @str varchar(5000)
  12. set @str=@sArr
  13. declare @start int
  14. declare @result nvarchar(max)
  15. set @result=''
  16. set @start=1
  17. declare @temp nvarchar(20);
  18. while @start<=dbo.Get_StrArrayLength(@str,',')
  19. begin
  20. if @liketype=0
  21. begin
  22. set @temp=dbo.Get_StrArrayStrOfIndex(@str,',',@start);
  23. if @temp like '%'+ @keyword+'%'
  24. begin
  25. set @result=@result+ @temp +',';
  26. end
  27. set @start=@start+1
  28. end
  29. else if @liketype=1
  30. begin
  31.  
  32. if dbo.Get_StrArrayStrOfIndex(@str,',',@start) like ''+ @keyword +'%'
  33. begin
  34. set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';
  35. end
  36. set @start=@start+1
  37. end
  38. else if @liketype=2
  39. begin
  40.  
  41. if dbo.Get_StrArrayStrOfIndex( @str, ',' , @start) like '%'+ @keyword+''
  42. begin
  43. set @result=dbo.Get_StrArrayStrOfIndex(@str, ',' , @start)+',';
  44. end
  45. set @start=@start+1
  46. end
  47. end
  48. return @result
  49. -- return cast(dbo.Get_StrArrayLength(@result,',')as nvarchar(2000))
  50. end

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

  1. JSon_零基础_008_将JSon格式的"数组"字符串转换为List集合

    将JSon格式的"数组"字符串转换为List集合. 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“name.values”集合, ...

  2. JSon_零基础_007_将JSon格式的"数组"字符串转换为Java对象"数组"

    将JSon格式的"数组"字符串转换为Java对象"数组". 应用此技术从一个json对象字符串格式中得到一个java对应的对象. JSONObject是一个“n ...

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

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

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

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

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

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

  6. 什么是“类数组对象”,在jquer中怎样将类数组对象转换为数组对象

    类数组对象的定义: 所谓"类数组对象"就是一个常规的Object对象,如$("div")但它和数组对象非常相似:具备length属性, 并以0.1.2.3……等 ...

  7. mysql里面如何用sql语句让字符串转换为数字

    sql语句将字符串转换为数字默认去掉单引号中的空格,遇到空格作为字符串截止, SELECT '123 and 1=1' +0 结果为123 MySQL里面如何用sql语句让字符串的‘123’转换为数字 ...

  8. java将前端的json数组字符串转换为列表

    记录下在前端通过ajax提交了一个json数组的字符串,在后端如何转换为列表. 前端数据转化与请求 var contracts = [ {id: '1', name: 'yanggb合同1'}, {i ...

  9. sql server将字符串转换为 uniqueidentifier 时失败

    sql server查询中出现 将字符串转换为 uniqueidentifier 时失败异常 原因为id设置为uniqueidentifier 字段,在where查询时需要做转换cast(id as ...

随机推荐

  1. Ubuntu解压缩命令

    原文链接:http://www.linuxidc.com/Linux/2012-08/68122.htm ZIP zip可能是目前使用得最多的文档压缩格式.它最大的优点就是在不同的操作系统平台,比如L ...

  2. November 1st 2016 Week 45th Tuesday

    Difficult circumstances serve as a textbook of life for people. 艰难坎坷是人们的生活教科书. It would be better if ...

  3. c++设计模式之单例模式下的实例自动销毁(垃圾自动回收器)

    关于C++单例模式下m_pinstance指向空间销毁问题,m_pInstance的手动销毁经常是一个头痛的问题,内存和资源泄露也是屡见不鲜,能否有一个方法,让实例自动释放. 解决方法就是定义一个内部 ...

  4. SSM整合(二):Spring4与Mybatis3整合

    上一节测试好了Mybatis3,接下来整合Spring4! 一.添加spring上下文配置 在src/main/resources/目录下的spring新建spring上下文配置文件applicati ...

  5. Jenkins插件安装和系统配置

    前面我们只是把Jenkins部署在Tomcat中了,下面来看看Jenkins中的插件和一些基础的系统配置. 1.用户管理 我们一般的项目组肯定是由多名成员组成的,如何向Jenkins添加我们的成员呢? ...

  6. 修改form表单的黄色背景

    input:-webkit-autofill { -webkit-box-shadow: 0 0 0px 1000px white inset; }

  7. Keepalived的安装

    Keepalived的安装 官网下载:点击直达 yum install -y libnl yum install -y libnl-devel 下载 cd /usr/local/src/ wget h ...

  8. Base64原理解析

    一. Base64编码由来 为什么会有Base64编码呢?因为有些网络传送渠道并不支持所有的字节,例如传统的邮件只支持可见字符的传送,像ASCII码的控制字符就 不能通过邮件传送.这样用途就受到了很大 ...

  9. python基础补漏-03-函数

    函数:一般来说就是 以功能划分的代码模块 [1] 内置函数 一般我们使用的模块 ---可以大概有个了解 大多数的用法都很简单 2 [函数返回值] 我们应该控制函数的每条分支. 也就是说 我们得到的函数 ...

  10. 手机GUI自动化测试工具选择

    (Graphical User Interface,简称 GUI,又称图形用户接口) 我们需要针对自身产品的需求,从中选取一款合适的工具来实现自动化.对于移动客户端GUI的自动化而言,需要保证选取的工 ...