加入收藏 | 设为首页 | 会员中心 | 我要投稿 常州站长网 (https://www.0519zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

sql数据库表字段分割字符串,查找指定位置批量替换方法

发布时间:2020-12-31 14:46:19 所属栏目:MySql教程 来源:网络整理
导读:以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 /****** Object: UserDefinedFunction [dbo].[f_split1] Script Date: 12/14/2010 21:45:01 ******/SET ANSI_NULLS ONGOSET QUOTED_IDENTIFIER ONGO--测试数据信息--

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

/****** Object:  UserDefinedFunction [dbo].[f_split1]    Script Date: 12/14/2010 21:45:01 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--测试数据信息
-- SELECT * FROM dbo.[f_split1] ('21|80|102|92|38|0|0|0|102|0|0|0|0','|')

ALTER function [dbo].[f_split1](@c   varchar(2000),@split   varchar(2))[email?protected]表示字符串,@split表示分隔符   
returns @t table(id INT,col varchar(20)) ----返回一个表,用这个表来存储分割出来的所有数据  
as   
    begin   
    DECLARE @tmpid int=1
      while(charindex(@split,@c)<>0)----当分隔符的索引不等于0时  
        begin   
          insert @t(id,col) values (@tmpid,substring(@c,1,charindex(@split,@c)-1))----分割出来的单个字符   
             set @c = stuff(@c,@c),'')----设置分割后的字符串   
              SET @[email?protected]+1
        end   
      insert @t(id,@c)  ----把分割出来的单个字符插入到表@t表
      return   
END
--------------------------------------------------------------------------
--------------------------------------------------------------------------
 
/****** Object:  StoredProcedure [dbo].[TB_UpdateList]   Script Date: 03/12/2014 17:19:15 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

--更改指定字符串中,指定位置的数据信息。 
--SELECT * FROM dbo.[f_split1] ('21|80|102|92|38|0|0|0|102|0|0|0|0','|')
ALTER PROCEDURE [dbo].[TB_UpdateList] 
AS 
  --判断临时表数据是否存在,如果存在则删除临时表
     if OBJECT_ID('tempdb..##project') is not null
		DROP TABLE ##project  
     if OBJECT_ID('tempdb..##projectItem') is not null
		DROP TABLE ##projectItem
		
	--获取数据信息
	SELECT id,SizeSum  INTO ##project FROM dbo.TB_MakeTrimPlan WHERE Size9>0  
    --定义变量
    DECLARE @tmpid INT,@SizeSum NVARCHAR(500),@tmplid INT,@SizeLSum NVARCHAR(500)
    DECLARE @sql NVARCHAR(max),@listvalue NVARCHAR(500),@getF NVARCHAR(500),@getd NVARCHAR(500)
    
    --创建临时表
    CREATE  TABLE ##projectItem(
    id INT,col NVARCHAR(50)
    )
    --查询数据信息
	SELECT @tmpid = MIN(id) FROM ##project
		WHILE @tmpid IS NOT NULL BEGIN
	         SELECT @SizeSum = SizeSum  FROM ##project WHERE id [email?protected]
	          
              INSERT INTO ##projectItem  SELECT * FROM dbo.[f_split1](@SizeSum,'|') 
                -- DROP TABLE ##projectItem
                SELECT  @tmplid=MIN(id) FROM ##projectItem
                --定义变量
                DECLARE @Ttotallistvalue NVARCHAR(500),@tmpq NVARCHAR(500)
                       SET @Ttotallistvalue=''
                       SET @tmpq=''
					WHILE @tmplid IS NOT NULL BEGIN
					
					    --查询数据信息
					     SELECT @listvalue =col  FROM ##projectItem WHERE id = @tmplid
					       --取出数据信息
					       SET @tmpq = @tmpq + @listvalue+'|'    
					       IF @tmplid=9 BEGIN  --分割后第九个,可以自定义位数
					             SET @listvalue= 0  
	                         END  
	                     --如果是指定位置就去修改数值信息
					     SET @Ttotallistvalue= @Ttotallistvalue + @listvalue+'|'   
					      	--找出最小值依次循环
					        SELECT @tmplid = MIN(id) FROM ##projectItem WHERE id > @tmplid 
					    END
					
					--去除最后一个字符
					SET @getF=left(@Ttotallistvalue,len(@Ttotallistvalue)-1)
					SET @getD=left(@tmpq,len(@tmpq)-1)
				    --更新数据信息
					SET @sql ='update TB_MakeTrimPlan set SizeSum= '''
					           [email?protected]+''' where SizeSum='''[email?protected]+''''  
                    EXEC(@sql)
               
             SELECT @tmpid = MIN(id) FROM dbo.##project WHERE id >@tmpid 
        END                                                                                
    --判断临时表数据是否存在,如果存在则删除临时表
	if OBJECT_ID('tempdb..##project') is not null
		DROP TABLE ##project  
     if OBJECT_ID('tempdb..##projectItem') is not null
		DROP TABLE ##projectItem

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:常州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读