服务器之家:专注于服务器技术及软件下载分享
分类导航

Mysql|Sql Server|Oracle|Redis|

服务器之家 - 数据库 - Mysql - MySQL里实现类似SPLIT的分割字符串的函数

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

2019-12-07 20:14MYSQL教程网 Mysql

SQL对字符串的处理能力比较弱,比如我要循环遍历象1,2,3,4,5这样的字符串,如果用数组的话,遍历很简单,但是T-SQL不支持数组,所以处理下来比较麻烦

下边的函数,实现了象数组一样去处理字符串。 

一,用临时表作为数组 

复制代码代码如下:


create function f_split(@c varchar(2000),@split varchar(2)) 
returns @t table(col varchar(20)) 
as 
begin 
while(charindex(@split,@c)<>0) 
begin 
insert @t(col) values (substring(@c,1,charindex(@split,@c)-1)) 
set @c = stuff(@c,1,charindex(@split,@c),'') 
end 
insert @t(col) values (@c) 
return 
end 
go 
select * from dbo.f_split('dfkd,dfdkdf,dfdkf,dffjk',',') 
drop function f_split 
col 
-------------------- 
dfkd 
dfdkdf 
dfdkf 
dffjk 
(所影响的行数为 4 行) 



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

复制代码代码如下:


CREATE function Get_StrArrayLength 

@str varchar(1024), --要分割的字符串 
@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('78,1,2,3',',') 
返回值:4 

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

复制代码代码如下:


CREATE function Get_StrArrayStrOfIndex 

@str varchar(1024), --要分割的字符串 
@split varchar(10), --分隔符号 
@index int --取第几个元素 

returns varchar(1024) 
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(50) 
set @str='1,2,3,4,5' 
declare @next int 
set @next=1 
while @next<=dbo.Get_StrArrayLength(@str,',') 
begin 
print dbo.Get_StrArrayStrOfIndex(@str,',',@next) 
set @next=@next+1 
end 


调用结果: 




5

延伸 · 阅读

精彩推荐
  • MysqlMySQL的Query Cache原理分析

    MySQL的Query Cache原理分析

    QueryCache(下面简称QC)是根据SQL语句来cache的。一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使用QC。每个Cache都是以SQL文本作为key来存的。 ...

    mysql教程网4772019-10-23
  • Mysqlsql格式化工具集合

    sql格式化工具集合

    如果想要我们的SQL语句看起来很美观,除了自己平时注意外,还有一个懒人方法 ...

    MYSQL教程网4122019-11-23
  • Mysqlmysql主从库不同步问题解决方法

    mysql主从库不同步问题解决方法

    本来配置可以使用的mysql主从库同步的数据库,突然出现无法同步的情况。那么大家可以参考下面的方法解决下。 ...

    MYSQL教程网4752019-11-21
  • Mysqlmysql 优化日记

    mysql 优化日记

    mysql 优化日记 使用mysql的朋友可以参考下,大家知道如果mysql优化与没优化性能会相差不少呢。 ...

    mysql教程网3322019-10-31
  • MysqlMySQL数据表损坏的正确修复方案

    MySQL数据表损坏的正确修复方案

    修复以损坏的MySQL数据表的实际操作在实际中是我们经常用到的,以下的文章主要是介绍正确修复以损坏的MySQL数据表的实际操作步骤,以下就是正文的介绍...

    mysql教程网2342019-11-13
  • Mysql使用JDBC连接Mysql数据库会出现的问题总结

    使用JDBC连接Mysql数据库会出现的问题总结

    这篇文章主要给大家介绍了关于使用JDBC连接Mysql数据库会出现的问题的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参...

    Dmego4072019-06-21
  • MysqlMySQL数据库运维之数据恢复的方法

    MySQL数据库运维之数据恢复的方法

    本篇文章主要介绍了MySQL数据库运维之数据恢复的方法,此处总结一下恢复方案,并结合数据库的二进制日志做下数据恢复的示范。小编觉得挺不错的,现...

    夏日寒冰4302019-07-08
  • Mysql常用的SQL例句 数据库开发所需知识

    常用的SQL例句 数据库开发所需知识

    常用的SQL例句全部懂了,你的数据库开发所需知识就够用了 ...

    MSSQL教程网3302019-11-27