首页 > 数据库 > 数据库开发技术 > SQL SERVER 自定义函数举例
需求说明
创建测试表及数据
/* 创建一张测试表及数据 */create table tmp(id int primary key ,name varchar(200));insert into tmpselect 1,'组长,班长,校长,委员长';insert into tmpselect 2 ,'连长,营长,师长,军长,司令';insert into tmpselect 3 ,'村长,镇长,区长,市长,厅长,省长,部长';
创建函数
create FUNCTION [dbo].[f_split](@str NVARCHAR(500),@delimiter NVARCHAR(20))RETURNS @table2 TABLE(val NVARCHAR(500))ASBEGINDECLARE @index INT,@startsplit INT,@id INT ,@maxid int,@id2 intdeclare @table table (id int,val nvarchar(50))SELECT @index=CHARINDEX(@delimiter,@str),@startsplit=1,@id=1WHILE @index>0BEGINIF @id>1BEGINSELECT @startsplit=@index+LEN(@delimiter)SELECT @index=CHARINDEX(@delimiter,@str,@startsplit)ENDIF @index>0BEGININSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit))ENDELSEBEGININSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1))ENDSELECT @id=@id+1ENDselect @id2=Min(id) from @tableselect @maxid=MAX(id) from @tableinsert into @table2 select val from @table where id=@maxidselect @maxid= @maxid -1while @id2<=@maxidbeginupdate @table2 set val=val+'/'+(select val from @table where id=@maxid )select @maxid =@maxid- 1endRETURNEND
执行查询
select name,(select val from [f_split](name,','))from tmp;
结果如下

TIPs:
以上函数包含字符串截取函数、字符串长度、字符串位置等,不太熟悉的小伙伴可以自己多练习一下
SQL SERVER 2016中新增了STRING_SPLIT 函数,也建议大家了解一下
还有一个偏门的PARSENAME函数也可以实现拆分,但是有局限性(是啥,自己测,哈哈)
如需获取该函数的每步说明可以联系我获取哦,谢谢。

4. 监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库
5. PostgreSQL主从复制--物理复制
6. MySQL传统点位复制在线转为GTID模式复制

原文作者:数据库干货铺;如有侵权,请联系管理员删除。