前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL SERVER 自定义函数举例

SQL SERVER 自定义函数举例

作者头像
July
发布2020-05-17 20:34:45
4900
发布2020-05-17 20:34:45
举报
文章被收录于专栏:数据库干货铺数据库干货铺

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

需求说明

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

创建测试表及数据

代码语言:txt
复制
/*  创建一张测试表及数据 */
create table tmp(id int primary key ,name varchar(200));

insert into   tmp
select 1,'组长,班长,校长,委员长';
insert into   tmp
select 2 ,'连长,营长,师长,军长,司令';
insert into   tmp
select 3 ,'村长,镇长,区长,市长,厅长,省长,部长';

创建函数

代码语言:txt
复制
create  FUNCTION [dbo].[f_split]
(
@str NVARCHAR(500),
@delimiter NVARCHAR(20)
)RETURNS @table2 TABLE(val NVARCHAR(500))
AS
BEGIN 
    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

执行查询

代码语言:txt
复制
select  name,(select val from  [f_split](name,','))
 from  tmp;

结果如下

TIPs:

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

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档