您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

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

2024/3/22 14:46:49发布18次查看
/*============================================================================== * *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以及服务器的搭建和安全性相关技术的交流和学习。 /****** object: userdefinedfunction [dbo].[f_split1] script date: 12/14/2010 21:45:01 ******/set ansi_nulls ongoset quoted_identifier ongo--测试数据信息-- 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 ongoset quoted_identifier ongo--更改指定字符串中,指定位置的数据信息。 --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
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product