zoukankan      html  css  js  c++  java
  • sqlserver 拼接字符串分割

    CREATE  FUNCTION [dbo].[fnQuerySplit]
        (
          @string VARCHAR(MAX) ,--待分割字符串
          @separator VARCHAR(255)--分割符
        )
    RETURNS @array TABLE ( item VARCHAR(255) )
    AS
        BEGIN
            DECLARE @begin INT ,
                @end INT ,
                @item VARCHAR(255);
            SET @begin = 1;
            SET @end = CHARINDEX(@separator, @string, @begin);
            WHILE ( @end <> 0 )
                BEGIN
                    SET @item = SUBSTRING(@string, @begin, @end - @begin);
                    INSERT  INTO @array
                            ( item )
                    VALUES  ( @item );
                    SET @begin = @end + 1;
                    SET @end = CHARINDEX(@separator, @string, @begin);
                END;
            SET @item = SUBSTRING(@string, @begin, LEN(@string) + 1 - @begin);
            IF ( LEN(@item) > 0 )
                INSERT  INTO @array
                        ( item
                        )
                VALUES  ( SUBSTRING(@string, @begin, LEN(@string) + 1 - @begin)
                        );
            RETURN;
        END;
    CREATE  FUNCTION [dbo].[Fun_String2Table]
        (
          @str NVARCHAR(MAX) ,
          @split NVARCHAR(10)
        )
    RETURNS @table TABLE ( [item] NVARCHAR(MAX) )
    AS
        BEGIN
            IF LEN(@split) = 0
                BEGIN
                    SET @split = N',';
                END;
      
            DECLARE @xml XML;
            SET @xml = CONVERT(XML, '<x><![CDATA['
                + REPLACE(CONVERT(VARCHAR(MAX), @str), @split,
                          ']]></x><x><![CDATA[') + ']]></x>');
      
            INSERT  INTO @table
                    SELECT  item
                    FROM    ( SELECT    c.value('text()[1]', 'nvarchar(4000)') [item]
                              FROM      @xml.nodes('/x') t ( c )
                            ) t
                    WHERE   item IS NOT NULL;
      
            RETURN;
        END;
    CREATE FUNCTION [dbo].[f_split]
        (
          @SourceSql NVARCHAR(MAX) ,
          @StrSeprate NVARCHAR(10)
        )
    RETURNS @temp TABLE ( value NVARCHAR(100) )
    AS
        BEGIN
            DECLARE @i INT;
            SET @SourceSql = RTRIM(LTRIM(@SourceSql));
            SET @i = CHARINDEX(@StrSeprate, @SourceSql);
            WHILE @i >= 1
                BEGIN
                    INSERT  @temp
                    VALUES  ( LEFT(@SourceSql, @i - 1) );
                    SET @SourceSql = SUBSTRING(@SourceSql, @i + 1,
                                               LEN(@SourceSql) - @i);
                    SET @i = CHARINDEX(@StrSeprate, @SourceSql);
                END;
            IF @SourceSql <> ''
                INSERT  @temp
                VALUES  ( @SourceSql );
            RETURN; 
        END;
    fnQuerySplit:

    
    
    Fun_String2Table:

    f_split:

     因为每次执行都是不一样的时间,所以综合下来,  

    Fun_String2Table 是最快的


  • 相关阅读:
    Nginx介绍
    linux vi编辑
    MySql数据类型
    Mysql用户权限控制(5.7以上版本)
    Linux上安装MySQL
    Java得到指定日期的时间
    Spring Boot 整合Redis 实现缓存
    编写高效优雅Java程序
    JVM调优和深入了解性能优化
    JVM执行子程序
  • 原文地址:https://www.cnblogs.com/myloveblogs/p/11766261.html
Copyright © 2011-2022 走看看