ITPub博客

首页 > 数据库 > 数据库开发技术 > SQL SERVER 自定义函数举例

SQL SERVER 自定义函数举例

原创 数据库开发技术 作者:数据库干货铺 时间:2020-05-08 23:02:20 0 删除 编辑

点击上方蓝字“数据库干货铺” 解锁更多精彩内容


SQLSERVER在很多场景下需要自建函数来满足工作需求,本文就自建一个常用的字符串分割函数。


需求说明

将字符串按照指定的分隔符进行分割,并将结果按照从后往前的顺序倒序排列,拼接后的结果用‘/’符连接。(也可以按照指定符号分割为多个列,修改最后一部分即可)

创建测试表及数据


/*  创建一张测试表及数据 */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))ASBEGIN     DECLARE @index INT,@startsplit INT,@id INT ,@maxid int,@id2 int    declare @table table (id int,val nvarchar(50))    SELECT @index=CHARINDEX(@delimiter,@str),@startsplit=1,@id=1    WHILE @index>0    BEGIN        IF @id>1          BEGIN             SELECT @startsplit=@index+LEN(@delimiter)             SELECT @index=CHARINDEX(@delimiter,@str,@startsplit)                    END         IF @index>0              BEGIN                 INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,@index-@startsplit))             END         ELSE         BEGIN               INSERT INTO @table VALUES (@id,SUBSTRING(@str,@startsplit,LEN(@str)-@startsplit+1))        END         SELECT @id=@id+1    END    select @id2=Min(id) from  @table    select @maxid=MAX(id) from  @table    insert into @table2 select val from @table where id=@maxid    select @maxid= @maxid -1    while @id2<=@maxid    begin    update @table2 set val=val+'/'+(select val from @table where id=@maxid )    select @maxid =@maxid- 1        end        RETURN END

 执行查询

select  name,(select val from  [f_split](name,',')) from  tmp;

结果如下

 

 TIPs:

  • 以上函数包含字符串截取函数、字符串长度、字符串位置等,不太熟悉的小伙伴可以自己多练习一下

  • SQL SERVER 2016中新增了STRING_SPLIT 函数,也建议大家了解一下

  • 还有一个偏门的PARSENAME函数也可以实现拆分,但是有局限性(是啥,自己测,哈哈)

如需获取该函数的每步说明可以联系我获取哦,谢谢。



往期精彩回顾



1.  升级python,就是这么简单

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)




扫



码


关
注




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

请登录后发表评论 登录
全部评论

注册时间:2019-07-18

  • 博文量
    273
  • 访问量
    66467