`

【转载】利用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)

 

分享到:
评论

相关推荐

    SQL字符串分割

    2. **动态字符串分割函数**:另一种实现方式是使用动态SQL语句构建函数,例如`f_split`函数。它通过不断查找并替换分隔符,直到原字符串中不再包含分隔符为止,从而实现字符串的完全分割。这种方式特别适用于分割由...

    SQL server中实现类似split功能的函数

    综上所述,SQL Server虽然没有内置的`SPLIT`函数,但通过`STRING_SPLIT`、自定义函数或组合其他内置函数,我们可以实现类似的功能,满足各种字符串处理需求。在实际应用中,需要根据具体环境和需求选择合适的方法。

    SQL Server实现split函数分割字符串功能及用法示例

    本文将详细介绍如何在SQL Server中实现`split`函数来分割字符串,并提供相关的使用示例。 首先,让我们了解这个自定义的`split`函数——`[dbo].[f_SplitToNvarchar]`。这个函数接受两个参数: 1. `@SourceSql`:这...

    sqlserver实现字符拆解成表格的形式

    本篇文章将详细介绍如何利用SQL Server自定义函数实现字符串拆分并转化为表格形式的功能。 #### 核心知识点 1. **自定义函数(User Defined Function, UDF)**: - 在SQL Server中,可以通过创建自定义函数来执行...

    字符串分割的字符串数量 SQL

    本篇文章将详细介绍如何利用SQL语言实现这一功能,具体来说是如何编写一个SQL函数来计算给定字符串中由特定分隔符分隔出的子字符串的数量。 #### 题目背景 在实际应用场景中,有时会遇到存储了多个值的字符串字段...

    sql2000字符串分割,字符串拆分

    ### SQL2000 字符串分割方法解析 在处理大量数据时,经常...此外,随着SQL Server版本的不断更新,后续版本中还提供了更多方便的内置函数来进行字符串操作,如`STRING_SPLIT()`等,使得字符串处理变得更加便捷高效。

    字符串分割自定义函数(sql)

    本文将详细介绍一个自定义的SQL函数`StringToTable`,该函数能够实现字符串分割的功能,并将结果存储在一个临时表中以便后续查询或处理。 #### 函数定义 ```sql CREATE FUNCTION StringToTable( @StringX varchar...

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

    SQL并没有内置的SPLIT函数,但可以通过自定义函数来实现这个功能。这里我们将讨论两种在SQL中实现SPLIT函数的方法。 **方法1** 首先,我们来看第一种实现方式,创建名为`f_split`的用户定义函数(UDF)。这个函数...

    sqlserver切割字符窜的函数

    ### SQL Server 字符串分割函数实现 在处理SQL Server中的数据时,经常需要对字符串进行分割操作以提取有用的信息。本文将详细介绍一个SQL Server自定义函数`f_split`,该函数能够有效地帮助用户完成字符串分割任务...

    SQL的split函数(自定义)new

    本文介绍了如何在SQL Server环境中实现一个支持Ntext类型字符串输入的自定义Split函数。通过这个函数,我们可以轻松地将大型文本数据分割成多个部分,这对于处理复杂的数据集非常有用。希望本文能对您理解和应用...

    SQLServer逗号分隔的字符串转换成表

    2. 利用 SQL Server 函数进行字符串拆分:可以使用 SQL Server 的字符串函数,例如 CHARINDEX、LEFT、RIGHT、LEN 等函数对字符串进行拆分。 3. 将拆分后的数据写入到临时表中:将拆分后的数据写入到第 1 步中创建的...

    SQL Server字符串切割函数

    本文将深入探讨SQL Server中的字符串切割函数,特别是如何创建和使用用户定义函数来实现这一功能。 首先,我们要明白用户定义函数(User-Defined Function, UDF)的概念。用户定义函数允许开发人员自定义一套逻辑,...

    sql实现split函数的脚本

    SQL实现Split函数的脚本是指使用SQL语言创建一个函数,以实现将一个字符串按照指定的分隔符拆分成多个子字符串,并将其返回为一个表的形式。下面是该函数的详细介绍。 函数定义 首先,我们需要定义一个函数,函数...

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

    在SQL中,处理字符串时确实不如其他编程语言那样灵活,...以上就是在MySQL中实现类似SPLIT功能的方法,虽然不如某些编程语言直接支持数组那样方便,但通过自定义函数和巧妙的逻辑,我们仍然可以有效地处理分隔字符串。

    SQL 语句 将一个表中用特殊字符分割的字段转换成多行数据.docx

    SQL 字符串分割函数实现多行数据转换 在数据库中,经常会遇到将一个字段中的特殊字符分割的字符串转换成多行数据的情况。这是一个常见的需求,但是网上提供的解决方案往往非常复杂,难以理解和实现。为了解决这个...

    sql分割字符串文档

    这里提到的`f_split`函数就是一个自定义的用户定义函数(UDF),用于实现字符串的分割功能。这个函数非常实用,尤其对于那些在标准SQL功能中无法轻易实现字符串分割操作的情况。 `f_split`函数的基本结构如下: ``...

    sqlserver2008 拆分字符串

    在SQL Server 2016及更高版本中,引入了`STRING_SPLIT`函数,这使得字符串拆分变得更加简单和高效。 总结起来,SQL Server 2008中拆分字符串通常需要自定义解决方案,如上述的交叉连接方法。虽然这个方法可以工作,...

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

    以上是SQL中实现字符串分割的几种方法,它们利用了字符串处理函数如`CHARINDEX`, `SUBSTRING`, `STUFF`等,以及循环结构,可以灵活地对字符串进行操作,满足各种需求。在实际应用中,这些自定义函数可以极大地提升...

Global site tag (gtag.js) - Google Analytics