视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
sql数据库表字段分割字符串,查找指定位置批量替换方法
2020-11-09 16:11:19 责编:小采
文档


/*============================================================================== * *Filename:TB_UpdateList.sql *Description:sql数据库字段分割字符指定位置批量替换,引用f_split *Version:1.0 *Created:2014.03.12 *Author:liangjw *E-mail:liangjw0

/*==============================================================================
*
* Filename: TB_UpdateList.sql
* Description: sql数据库字段分割字符指定位置批量替换,引用 f_split
* Version: 1.0
* Created: 2014.03.12
* Author : liangjw
* E-mail : liangjw0504@163.com
* Q Q : 592568532
* Profile Url:http://90ideas.net/
* Company: Copyright (C) Create Family Wealth Power By Peter
*
==============================================================================*/
* 备注信息: 上传部分自己总结的常用方法的封装,有不足和不完美之处,希望大家指出来,愿意一起
* 主要研究erp,cms,crm,b2b,oa等系统和网站的开发,欢迎有共同追求和学的IT人员一起学习和交流。
* 学习和讨论有关asp.net mvc ,Ajax ,jquery ,html/css, xml,sqlserver ,wpf,IIS以及服务器的搭建和安全性相关技术的交流和学习。 <无> $velocityCount-->
/****** 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))--@c表示字符串,@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,1,charindex(@split,@c),'')----设置分割后的字符串 
 SET @tmpid=@tmpid+1
 end 
 insert @t(id,col) values (@tmpid,@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 =@tmpid
	 
 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= '''
	 +@getF+''' where SizeSum='''+@getD+'''' 
 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

下载本文
显示全文
专题