SQLSERVER - Mysql 调试 笔记

系统 1637 0
// 性能
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 ' , ' , ' )

 

SQLSERVER - Mysql 调试 笔记


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论