zoukankan      html  css  js  c++  java
  • SQLSERVER Mysql 调试 笔记

    //性能
    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+1FOR 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(@sText1100)
            
            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(@sValue1100)
                    
                    INSERT @retArray (value)
                    VALUES (@sValue);
                END
            END
        END
        RETURN
    END


    SELECT *  FROM  fnSplitStr('1,2,3,2,,3,3',',')
  • 相关阅读:
    转评:你造promise就是monad吗
    当程序员面对小学数学题
    名画的背后都藏着些什么?
    趣题:你能想到圆环的截面有哪几种解吗
    ajax请求的异步嵌套问题分析
    不平衡分类学习方法 --Imbalaced_learn
    sklearn中的metrics模块中的Classification metrics
    sklearn中的model_selection模块(1)
    Spark RDD——combineByKey
    Spark RDD中的aggregate函数
  • 原文地址:https://www.cnblogs.com/rhythmK/p/2498947.html
Copyright © 2011-2022 走看看