• SQL Server字符串分割函数Split


     1 USE [QuickFrame_FIQS];
     2 GO
     3 /****** Object:  UserDefinedFunction [dbo].[Split]    Script Date: 2018/8/14 16:41:04 ******/
     4 SET ANSI_NULLS ON;
     5 GO
     6 SET QUOTED_IDENTIFIER ON;
     7 GO
     8 
     9 --功能:字符串分割函数
    10 --描述 :返回分割后的数据表记录
    11 --编制人:Denghejing
    12 --编制时间:2018.08.14
    13 
    14 /*
    15 --因为这个函数创建的时候默认为以 逗号 分割,所以只需要使用 default 关键字就可以了
    16 select * from Split(default,'123,456,789')
    17 select * from Split(default,'123,456,789,')
    18 
    19 --其它字符分割
    20 select * from Split('abc','11111abc22222abc33333')
    21 select * from Split('abc','11111abc22222abc33333abc')
    22 */
    23 
    24 ALTER FUNCTION [dbo].[Split]
    25 (
    26     @separator VARCHAR(64) = ',',
    27     @string NVARCHAR(MAX)
    28 )
    29 RETURNS @ResultTab TABLE
    30 (
    31     Id INT,
    32     Result NVARCHAR(500)
    33 )
    34 AS
    35 BEGIN
    36     DECLARE @Num INT;
    37 
    38     IF (@string IS NOT NULL AND @string <> '' AND LEN(@string) > 0)
    39     BEGIN
    40         IF (CHARINDEX(@separator, @string) > 0) --判断要截取的字符是否存在
    41         BEGIN
    42             SET @Num = 0;
    43             WHILE (CHARINDEX(@separator, @string) > 0) --如果要截取的字符存在,就继续循环
    44             BEGIN
    45                 SET @Num = @Num + 1;
    46                 INSERT INTO @ResultTab
    47                 (
    48                     Id,
    49                     Result
    50                 ) --截取字符串,插入表变量
    51                 SELECT @Num,
    52                        LEFT(@string, CHARINDEX(@separator, @string) - 1);
    53 
    54                 --把已经截取并插入的字符串删除
    55                 SET @string = STUFF(@string, 1, CHARINDEX(@separator, @string) - 1 + LEN(@separator), '');
    56             END;
    57 
    58             --如果最后一个截取的字符串为空,那就不插入了
    59             --例如:'123,456,789,' 这样的字符串最后剩下的就是空字符串了
    60             IF (@string IS NOT NULL AND @string <> '')
    61             BEGIN
    62                 INSERT INTO @ResultTab
    63                 (
    64                     Id,
    65                     Result
    66                 )
    67                 SELECT @Num + 1,
    68                        @string;
    69             END;
    70         END;
    71         ELSE
    72         BEGIN
    73             DELETE FROM @ResultTab;
    74         END;
    75     END;
    76     ELSE
    77     BEGIN
    78         DELETE FROM @ResultTab;
    79     END;
    80     RETURN;
    81 END;

    最终执行结果集:

  • 相关阅读:
    go语言从零学起(三) -- chat实现的思考
    go语言从零学起(二)--list循环删除元素(转载)
    go语言从零学起(一) -- 文档教程篇
    Spring框架事务支持模型的优势
    Thymeleaf
    社保到底是多交好,还是少交好?
    使用静态工厂方法而不是构造器
    EJB、RMI、XMLRPC、Hessian、Thrift 、Protobuf
    MySQL存储过程
    MySQL常用功能语句分类总结
  • 原文地址:https://www.cnblogs.com/Denghejing/p/9475587.html
Copyright © 2020-2023  润新知