• SQLSERVER


    //性能
    SET STATISTICS IO on;  
    SET STATISTICS TIME on;

    //Mysql 切分字符串

    复制代码
    CREATE  PROCEDURE proc_split(
        inputstring VARCHAR(1000),
        delim CHAR(1)
    )
    BEGIN
        DECLARE strlen INT;
        DECLARE last_index INT;
        DECLARE cur_index INT;
        DECLARE cur_char VARCHAR(200);
        DECLARE len INT;
        SET cur_index=1;
        SET last_index=0;
        SET strlen=LENGTH(inputstring);  
        DROP TABLE IF EXISTS splittable;
        CREATE TEMPORARY TABLE splittable(
            id INT AUTO_INCREMENT,
            VALUE VARCHAR(20),
            PRIMARY KEY (`ID`),
            UNIQUE KEY `ID` (`ID`)
        ) ;
        WHILE(cur_index<=strlen) DO    
        BEGIN
            IF SUBSTRING(inputstring FROM cur_index FOR 1)=delim OR cur_index=strlen THEN
                SET len=cur_index-last_index-1;
                IF cur_index=strlen THEN
                   SET len=len+1;
                END IF;
                INSERT INTO splittable(`value`)VALUES(SUBSTRING(inputstring FROM (last_index+1) FOR len));
                SET last_index=cur_index;
            END IF;
            SET cur_index=cur_index+1;
        END;
        END WHILE;
    END;

    CALL proc_split('1,2,3,4,3,4,3,4,4',',') ;
    SELECT * from  splittable;
    复制代码

    //SQL SERVER 切分

    复制代码
    CREATE FUNCTION fnSplitStr (
        @sText      NVARCHAR(Max),
        @sDelim     CHAR(1)
    )

    RETURNS @retArray TABLE (
        value   VARCHAR(100)
    )
    AS
    BEGIN
        DECLARE 
            @posStart        BIGINT,
            @posNext        BIGINT,
            @valLen            BIGINT,
            @sValue            NVARCHAR(100);

        IF @sDelim IS NULL 
        BEGIN
            IF LEN(@sText)>100 SET @sText = SUBSTRING(@sText, 1, 100)
            
            INSERT @retArray (value)
            VALUES (@sText);
        END
        ELSE
        BEGIN
            SET @posStart = 1;

            WHILE @posStart <= LEN(@sText)
            BEGIN
                SET @posNext = CHARINDEX(@sDelim, @sText, @posStart);

                IF @posNext <= 0 
                    SET @valLen = LEN(@sText) - @posStart + 1;
                ELSE
                    SET @valLen = @posNext - @posStart;

                SET @sValue = SUBSTRING(@sText, @posStart, @valLen);
                SET @posStart = @posStart + @valLen + 1;

                IF LEN(@sValue) > 0
                BEGIN
                    IF LEN(@sValue)>100 SET @sValue = SUBSTRING(@sValue, 1, 100)
                    
                    INSERT @retArray (value)
                    VALUES (@sValue);
                END
            END
        END
        RETURN
    END


    SELECT *  FROM  fnSplitStr('1,2,3,2,,3,3',',')
    复制代码
    一只站在树上的鸟儿,从来不会害怕树枝会断裂,因为它相信的不是树枝,而是它自己的翅膀。与其每天担心未来,不如努力做好现在。
  • 相关阅读:
    第十二章 圆周率的计算问题分析
    第十一章:random库概述
    【模板】分治 FFT
    [PKUWC2018]Slay the Spire
    [PKUWC2018]随机算法
    [PKUWC2018]Minimax
    线段树合并初探
    平衡树初探
    Luogu P1613 跑路 题解报告
    CH138 兔子和兔子 题解报告
  • 原文地址:https://www.cnblogs.com/php-rearch/p/6218439.html
Copyright © 2020-2023  润新知