`
happyzpx
  • 浏览: 29651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Sql字符串分组Split函数的两种实现方法

    博客分类:
  • sql
sql 
阅读更多

      在给文章加自定义标签时,需要在存储过程中对输入的字符串按照“,”字符分割成一个字符数组。但是Sql中没有实现字符串分组的Split方法。因此就需要编写一个自定义的Split函数。我首先是使用表值函数的方法实现的字符串分组,但是在使用中感觉不是很方便。后来又在网上找到了一种使用两个标量函数,其中一个函数首先返回分割后字符数组的长度,另一个函数依次返回每个分割出的字符串。然后使用循环依次获取分割的字符。

表值函数实现Split方法

复制代码
代码
 Create FUNCTION [dbo].[SplitToTable]
 (
     
@SplitString nvarchar(max),
     
@Separator nvarchar(10)=' '
 )
 
RETURNS @SplitStringsTable TABLE
 (
 
[id] int identity(1,1),
 
[value] nvarchar(max)
 )
 
AS
 
BEGIN
     
DECLARE @CurrentIndex int;
     
DECLARE @NextIndex int;
     
DECLARE @ReturnText nvarchar(max);
     
SELECT @CurrentIndex=1;
     
WHILE(@CurrentIndex<=len(@SplitString))
         
BEGIN
             
SELECT @NextIndex=charindex(@Separator,@SplitString,@CurrentIndex);
             
IF(@NextIndex=0 OR @NextIndex IS NULL)
                 
SELECT @NextIndex=len(@SplitString)+1;
                 
SELECT @ReturnText=substring(@SplitString,@CurrentIndex,@NextIndex-@CurrentIndex);
                 
INSERT INTO @SplitStringsTable([value]VALUES(@ReturnText);
                 
SELECT @CurrentIndex=@NextIndex+1;
             
END
     
RETURN;
 
END
复制代码

 

select * FROm dbo.SplitToTable('111,b2222,323232,32d,e,323232f,g3222', ',')

结果为

id          value
----------- ---------------------------------------
1           111
2           b2222
3           323232
4           32d
5           e
6           323232f
7           g3222

(7 行受影响)

 

使用循环的方法

首先GetSplitLength函数返回分割后的字符数组的长度。

 

复制代码
代码
 Create function [dbo].[GetSplitLength]
 (
  
@String nvarchar(max),  --要分割的字符串
  @Split nvarchar(10)  --分隔符号
 )
 
returns int
 
as
 
begin
  
declare @location int
  
declare @start int
  
declare @length int
 
  
set @String=ltrim(rtrim(@String))
  
set @location=charindex(@split,@String)
  
set @length=1
  
while @location<>0
  
begin
    
set @start=@location+1
    
set @location=charindex(@split,@String,@start)
    
set @length=@length+1
  
end
  
return @length
 
end
复制代码

 

 

select dbo.GetSplitLength('111,b2222,323232,32d,e,323232f,g3222',',')

结果为7。

 

GetSplitOfIndex函数是按顺序分别获取分割后的字符串。

 

复制代码
代码
 ALTER function [dbo].[GetSplitOfIndex]
 (
  
@String nvarchar(max),  --要分割的字符串
  @split nvarchar(10),  --分隔符号
  @index int --取第几个元素
 )
 
returns nvarchar(1024)
 
as
 
begin
  
declare @location int
  
declare @start int
  
declare @next int
  
declare @seed int
 
  
set @String=ltrim(rtrim(@String))
  
set @start=1
  
set @next=1
  
set @seed=len(@split)
  
  
set @location=charindex(@split,@String)
  
while @location<>0 and @index>@next
  
begin
    
set @start=@location+@seed
    
set @location=charindex(@split,@String,@start)
    
set @next=@next+1
  
end
  
if @location =0 select @location =len(@String)+1 
  
  
return substring(@String,@start,@location-@start)
 
end
复制代码

 

 

select dbo.GetSplitOfIndex('111,b2222,323232,32d,e,323232f,g3222',',', 3)

结果323232。

 

 

复制代码
代码
 DECLARE @Tags nvarchar(max);
 
SELECT @Tags='111,b2222,323232,32d,e,323232f,g3222';
 
DECLARE @Tag nvarchar(1000)
 
DECLARE @next int;
 
set @next=1
 
 
DECLARE @Length int;
 
SELECT @Length=dbo.GetSplitLength(@Tags,',')

 
while @next<=@Length
 
begin
     
SET @Tag = left(dbo.GetSplitOfIndex(@Tags,',',@next), 16);
     
print @Tag
     
SET @Next=@Next+1;
 
END
复制代码

 

 

结果为:

111
b2222
323232
32d
e
323232f
g3222

分享到:
评论

相关推荐

    db2字符串分隔,函数,过程的使用

    `STRIP()`函数用于去除字符串两端或内部的空格或指定字符。例如,`STRIP(' Hello World ')`将返回'Hello World'。`TOKENIZE()`函数则用于将字符串按照指定的分隔符切分成多个部分。例如,`TOKENIZE('apple,banana,...

    Sql Server数据库中自定义拆分字符串函数Split()

    Sql Server数据库中自定义拆分字符串函数Split()

    sqlserver中根据某个字符切割字符串函数

    sqlserver中根据某个字符切割字符串函数,比如根据逗号切割字符串,结果返回的是一个表值函数,这个函数返回结果字段包含Id和Value,Id为序号,Value为切割后的值

    sqlserver 字符串分割表函数(新写法) fn_split 成表函数(带序号)

    sqlserver 字符串分割表函数(新写法) fn_split 成表函数(带序号)

    SQL FUNCTION Split 字符串分割函数 的创建

    SQL FUNCTION Split 字符串分割函数 的创建,方法加实例

    Oracle中实现Split函数功能

    Oracle 中实现 Split 函数功能的优点是可以灵活地处理不同的分隔符和字符串长度。同时,这个函数也可以与其他 Oracle 函数和操作符结合使用,以实现更加复杂的数据处理任务。 在实际应用中,Oracle 中实现 Split ...

    SQL字符串分割

    ### SQL字符串分割技术详解 在数据库管理与查询中,经常遇到需要将一个包含多个值的字符串字段分割成多个单独字段的情况。这种需求在处理CSV数据、解析复合字段或执行复杂的数据清洗任务时尤为常见。本文将详细介绍...

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

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

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

    本文介绍了一种通过SQL函数来计算字符串中子字符串数量的方法,这种方法不仅可以用来处理电子邮件地址,还可以应用于其他类似的场景,如处理电话号码列表、标签列表等。此外,此方法具有一定的灵活性,可以根据实际...

    oracle split函数

    本文将详细介绍两种在Oracle中实现字符串分割的方法:第一种是通过创建类型和管道函数的方式;第二种则是通过循环和子字符串处理实现的。 #### 二、第一种实现方式:创建类型和管道函数 ##### 1. 创建类型 `TY_STR...

    oracle_split_函数_返回数组

    在Oracle数据库中,由于内置函数不直接支持像Java中的`split`那样拆分字符串并返回数组,因此开发者需要自定义函数来实现这一功能。这里提到的两种方法都是为了解决这个问题,即根据指定的分隔符将字符串拆分为一个...

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

    这里我们将讨论两种在SQL中实现SPLIT函数的方法。 **方法1** 首先,我们来看第一种实现方式,创建名为`f_split`的用户定义函数(UDF)。这个函数接受两个参数:`@SourceSql`是要被分割的字符串,`@StrSeprate`是...

    截取用,分割的字符串中的第n个字符串 SQL

    综上所述,本文介绍了如何在SQL中实现截取用特定字符分割的字符串中的第n个子字符串的方法,并通过实例展示了其实际应用场景。这种方法不仅适用于简单的数据处理任务,还能够在复杂的数据分析项目中发挥重要作用。

    Oracle拆分字符串,字符串分割的函数

    如果内置函数无法满足需求,可以创建自定义PL/SQL函数来实现特定的字符串拆分逻辑。 7. **示例应用** 例如,我们有一个以逗号分隔的字符串,如"apple,banana,orange",我们可以使用`instr()` 和 `substr()` 结合...

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

    这个自定义的`split`函数提供了一种灵活且高效的方式来处理字符串数据,避免了使用复杂的T-SQL语句或者多次连接操作。 总结来说,理解并掌握如何在SQL Server中创建和使用`split`函数对于数据库开发者来说是十分...

    plsql分割字符串

    自定义函数`FUNCTION_SF_SPLIT_STRING`如上所示,是一个典型的用于分割字符串的函数,它接受两个参数:待分割的字符串`STRING`和用作分隔符的子字符串`SUBSTRING`,返回一个`VARCHAR2`类型的数组,其中包含了分割后...

    SQL字符串按殊字符串拆分.zip

    "SQL字符串按殊字符串拆分.zip"这个压缩包文件显然提供了一个解决方案,它帮助用户更快速、便捷地拆分包含特殊字符的字符串。这个工具或者教程可能是通过一系列步骤或存储过程来实现的,使得用户可以自定义拆分规则...

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

    `StringToTable`函数提供了一种简单而有效的方法来处理数据库中的字符串分割问题。通过自定义函数的形式,不仅使得代码更加模块化,也便于维护和复用。对于需要频繁处理字符串分割任务的应用场景来说,这是一个非常...

    oracle split 函数

    Oracle标准SQL并没有提供直接用于字符串分割的内置函数,因此开发者通常会通过自定义函数的方式来实现这一功能。本篇文章将详细介绍如何在Oracle中实现一个名为`split`的函数来完成字符串的分割,并将其结果以表的...

    sqlserver 实现 行转列 split 分割的函数

    sqlserver 实现 行转列 split 分割的函数,具体使用方法写有在文件里。

Global site tag (gtag.js) - Google Analytics