zoukankan      html  css  js  c++  java
  • 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;

    最终执行结果集:

  • 相关阅读:
    jsp学习笔记(一)
    20170215学习计划
    腾讯云CVM使用记录--使用root权限
    转:ASP.NET MVC3 Model验证总结
    ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象
    c#中如何将一个string数组转换为int数组
    转:自定义ASP.NET MVC Html辅助方法
    转:ASP.NET MVC扩展之HtmlHelper辅助方法
    自己用的一个ASP.Net MVC分页拿出来分享下(转)
    MVC分页控件之二,为IQueryable定义一个扩展方法,直接反回PagedList<T>结果集(转)
  • 原文地址:https://www.cnblogs.com/Denghejing/p/9475587.html
Copyright © 2011-2022 走看看