`

【转载】利用SQL的charindex实现字符串数组和Split函数

阅读更多

  大家在T-SQL中使用substring的时候需要注意一点,T-SQL的第一个字符的

下标是从1开始的,不像在C#中第一字符是从0开始的。

 

原文地址:SQL字符串数组操作
文章出处:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/76999.html)

 

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


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


调用示例:select dbo.Get_StrArrayLength('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',',')
返回值:4

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


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


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

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

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 
set @next=1
while @next<=dbo.Get_StrArrayLength(@str,',')
begin
  print dbo.Get_StrArrayStrOfIndex(@str,',',@next)
  set @next=@next+1
end

print dbo.CheckStrInArr('21',@str)

调用结果:
1
2
3
4
5

四、自己加一个函数,检查一个元素是否在数组中

Alter 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


*/

文章出处:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/76999.html)

 

原文地址:SQL实现split功能的函数
文章出处:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/77000.html)

分割再成批插入

declare @s varchar(8000),@sql nvarchar(4000)
set @s='1,12,1212,4545'
set @sql='insert into t(col) select '+replace(@s,',',' col union all select ')
exec(@sql)

测试
drop table #table
declare @s varchar(8000),@sql nvarchar(4000)
set @s='1,12,1212,4545,454'
create table #table (col int)
set @sql='insert into #table(col) select '+replace(@s,',',' col union all select ')
exec(@sql)
select * from #table

create function f_split(@SourceSql varchar(8000),@StrSeprate varchar(10))
returns @temp table(a varchar(100))
--实现split功能 的函数
as
begin
declare @i int
set @SourceSql=rtrim(ltrim(@SourceSql))
set @i=charindex(@StrSeprate,@SourceSql)
while @i>=1
begin
insert @temp values(left(@SourceSql,@i-1))
set @SourceSql=substring(@SourceSql,@i+1,len(@SourceSql)-@i)
set @i=charindex(@StrSeprate,@SourceSql)
end
if @SourceSql<>'\'
insert @temp values(@SourceSql)
return
end

用法:select * from dbo.f_split('ABC:BC:C:D:E',':')
文章出处:DIY部落(http://www.diybl.com/course/7_databases/sql/sqlServer/2007106/77000.html)

 

分享到:
评论

相关推荐

    SQLserver中字符串查找功能patindex和charindex的区别

    包括 1、全匹配查找字符串 2、模糊查找字符串 CHARINDEX 和 PATINDEX 函数都返回指定模式的开始位置。PATINDEX 可使用通配符,而 CHARINDEX 不可以。 这两个函数都带有2个参数: 1 希望获取其位置的模式。使用 ...

    SQL Server字符串处理函数大全

    字符串函数对二进制数据、字符串和表达式执 行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的SELECT 和WHERE 子句...

    sqlserver中常用函数

    sqlserver中常用函数----字符串函数---- ASCII() --函数返回字符表达式最左端字符的ASCII 码值 CHAR() --函数用于将ASCII 码转换为字符 --如果没有输入0 ~ 255 之间的ASCII 码值CHAR 函数会返回一个NULL 值 ...

    MySQL里实现类似SPLIT的分割字符串的函数

    下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@...

    字符串和日期函数总结

    字符串和日期函数charindex(expression,expressionOfMain) expression 代表指定要找的字符串的子串,expressionOfMain代表给定的字符串

    SQL Server CHARINDEX和PATINDEX详解

    SQL Server CHARINDEX和PATINDEX详解

    SqlServer类似正则表达式的字符处理问题

    SQL Serve提供了简单的字符模糊匹配功能,比如:like, patindex,不过对于某些字符处理场景还显得并不足够,日常碰到的几个问题有: 1. 同一个字符/字符串,出现了多少次 2. 同一个字符,第N次出现的位置 3. 多个...

    SQL实现金额大写转化函数

    select @strleft=left(@tt,charindex('.',@tt)-1) --小数点左边 select @strright=right(@tt,2) --小数点右边 --************************************************************** --记录小数点左边多少位 declare @...

    charindex instruction

    返回字符串中指定表达式的起始位置。 语法 CHARINDEX ( expression1 , expression2 [ , start_location ] ) 参数 expression1 一个表达式,其中包含要寻找的字符的次序。expression1 是一个短字符数据类型分类...

    SQL中Charindex和Oracle中对应的函数Instr对比

    sql :charindex(‘字符串’,字段)&gt;0 charindex(‘administrator’,MUserID)&gt;0 oracle:instr(字段,’字符串’,1,1) &gt;0 instr(MUserID,’administrator’,1,1)&gt;0 在项目中用到了Oracle中 Instr 这个函数,顺便仔细的...

    CHARINDEX函数

    返回字符串中指定表达式的起始位置。 语法 CHARINDEX ( e&shy;xpression1 , e&shy;xpression2 [ , start_location ] ) 参数 e&shy;xpression1 一个表达式,其中包含要寻找的字符的次序。e&shy;xpression1 是一个短...

    SQL_Sever数据库常用语句大全.zip

    stuff指定位置插入字符串、删掉字符串函数 查看数据库信息功能大全 存储过程解析大全 获取月份的月初月末时间 Convert转换数据类型函数(格式化字符串) newid生成唯一的序列 newid函数随机抽取n条记录 新增数据库表...

    SQL里类似SPLIT的分割字符串函数

    一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@c)&lt;&gt;0) begin insert @t(col) values ...

    sql字符串函数大全和使用方法示例

    SQL SERVER支持的字符串函数内容: 代码如下:LEN(string)函数LOWER(string)函数UPPER (string)函数LTRIM(string)函数RTRIM (string)函数SUBSTRING(string,start_position,length)函数CHARINDEX(string,substring)...

    SQL中实现SPLIT函数几种方法总结(必看篇)

    --实现split功能 的函数 --date :2003-10-14 as begin declare @i int set @SourceSql=rtrim(ltrim(@SourceSql)) set @i=charindex(@StrSeprate,@SourceSql) while @i&gt;=1 begin insert @temp values(lef

    sqlserver自定义函数

    --结合上边两个函数,象数组一样遍历字符串中的元素 create function f_splitstr(@SourceSql varchar(8000),@StrSeprate varchar(100)) returns @temp table(F1 varchar(100)) as begin declare @ch as ...

    sqlserver 字符串分拆 语句

    –&gt;Title:生成測試數據 –&gt;Author:wufeng4552 –&gt;Date :2009-09-21 09:02:08 if object_id(‘f_split’)is not null drop function f_split go create function f_split ( @s varchar(8000), –待分拆的字符串 ...

    SQL中字符串中包含字符的判断方法

    在sql中我判断包含字符串我们可使用很多方法,如like,replace,charindex函数都可实现我们要的功能,下面我来给各位介绍判断字符串包含字符串sql语句。 通过2个函数CHARINDEX和PATINDEX以及通配符的灵活使用 函数:...

    SQL字符串处理函数大全

    select语句中只能使用sql...字符串函数对二进制数据、字符串和表达式执行不同的运算。此类函数作用于CHAR、VARCHAR、 BINARY、 和VARBINARY 数据类型以及可以隐式转换为CHAR 或VARCHAR的数据类型。可以在SELECT 语句的

Global site tag (gtag.js) - Google Analytics