• 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;

    最终执行结果集:

  • 相关阅读:
    c#向某网址Post信息,并得到Cookies
    调度自动化系统及调度数据网安全分析探讨
    C#winform中怎么将程序最小化到系统托盘
    电力配网自动化解决方案
    .NET (c#) 模拟 Cookie
    调整数组顺序使奇数位于偶数前面
    在字符串中删除特定的字符
    在O(1)时间内删除链表结点
    单链表逆置
    从尾到头输出链表
  • 原文地址:https://www.cnblogs.com/Denghejing/p/9475587.html
Copyright © 2020-2023  润新知