• Sql Server Split函数


    创建表值函数Split 

    Create FUNCTION [dbo].[split]

        (
          @Long_str VARCHAR(8000) ,
          @split_str VARCHAR(100)
        )
    RETURNS @tmp TABLE
        (
          ID INT IDENTITY
                 PRIMARY KEY ,
          short_str VARCHAR(8000)
        )
    AS 
        BEGIN   
            DECLARE @long_str_Tmp VARCHAR(8000) ,
                @short_str VARCHAR(8000) ,
                @split_str_length INT   
     
            SET @split_str_length = LEN(@split_str)    
            IF CHARINDEX(@split_str, @Long_str) <= 0 
                BEGIN
                    INSERT  INTO @tmp
                            SELECT  @Long_str
                END
            ELSE 
                BEGIN
                    IF CHARINDEX(@split_str, @Long_str) = 1 
                        SET @long_str_Tmp = SUBSTRING(@Long_str,
                                                      @split_str_length + 1,
                                                      LEN(@Long_str)
                                                      - @split_str_length)
     
                    ELSE 
                        SET @long_str_Tmp = @Long_str
     
                    IF CHARINDEX(REVERSE(@split_str), REVERSE(@long_str_Tmp)) > 1 
                        SET @long_str_Tmp = @long_str_Tmp + @split_str    
                    ELSE 
                        SET @long_str_Tmp = @long_str_Tmp    
     
                    WHILE CHARINDEX(@split_str, @long_str_Tmp) > 0 
                        BEGIN   
                            SET @short_str = SUBSTRING(@long_str_Tmp, 1,
                                                       CHARINDEX(@split_str,
                                                                 @long_str_Tmp)
                                                       - 1)    
                            DECLARE @long_str_Tmp_LEN INT ,
                                @split_str_Position_END INT   
                            SET @long_str_Tmp_LEN = LEN(@long_str_Tmp)    
                            SET @split_str_Position_END = LEN(@short_str)
                                + @split_str_length    
                            SET @long_str_Tmp = REVERSE(SUBSTRING(REVERSE(@long_str_Tmp),
                                                                  1,
                                                                  @long_str_Tmp_LEN
                                                                  - @split_str_Position_END))
                            IF @short_str <> '' 
                                INSERT  INTO @tmp
                                        SELECT  @short_str
                        END
                END         
            RETURN     
        END

     用游标循环获取Split的值

            DECLARE cur_user CURSOR FOR
            SELECT short_str FROM dbo.split(@UserIDs,',')
            OPEN cur_user
            FETCH NEXT FROM cur_user INTO @userId
            WHILE @@fetch_status = 0 
                BEGIN
                    INSERT  INTO #User
                            SELECT  UserId ,
                                    MO_StaffID ,
                                    UserName
                            FROM    dbo.aspnet_Users
                            WHERE   UserId = @userId ;
                    FETCH NEXT FROM cur_user INTO @userId    
                END
            CLOSE cur_user

            DEALLOCATE cur_user 

  • 相关阅读:
    Hibernate中日期(Date)类型 与oracle中日期的映射处理
    mssql注入经常使用的命令
    EL表达式遍历Map集合
    TomCat项目空间映射 配置
    JSP探针虚拟主机JSP环境检测工具
    什么是RSS
    大U盘容量的烦恼:copy 4G 以上单个文件时总是显示U盘已满
    Java初体验之bool
    何为Cookie
    转测试网站各项性能的31 个免费在线工具
  • 原文地址:https://www.cnblogs.com/colder/p/2051138.html
Copyright © 2020-2023  润新知