分割字符串存储过程

摘要:
今天有一个需求需要进行以“;”和“,”为分割符把数据分隔开,然后再插入数据库里,用存储过程实现;如字符串为:kimhillzhang,20;jinshanzhang,25,现在要以kimhillzhang20为一条数据插入数据库,以jinshanzhang25为一条数据插入数据库nameagekimhillzhang20jinshanzhang25存储过程代码如下:/*张金山2010-5-25*/

今天有一个需求需要进行以“;”和“,”为分割符把数据分隔开,然后再插入数据库里,用存储过程实现;如字符串为:kimhillzhang,20;jinshanzhang,25,现在要以kimhillzhang 20 为一条数据插入数据库,以jinshanzhang 25为一条数据插入数据库

name age

kimhillzhang 20

jinshanzhang 25

存储过程代码如下:

/*
张金山 2010-5-25
*/
create procedure sp_SplitConent
@string nvarchar(1000), -- 要分隔的字符串
@splitchar nvarchar(10) = ';', -- 以“;”为分隔字符
@splitC nvarchar(10)=',', --以“,”为分隔符
@tablename nvarchar(50), -- 存入的表名称
@fieldname nvarchar(50)-- 存入的字段名称
as -- 将字符串分隔开放进表中
declare @l int -- 第一个分隔";"字符的位置
declare @s int -- 第二个分隔";"字符的位置
declare @first int --第一个分隔","字符的位置
declare @last int --第一个分隔","字符的位置
set @l = 0
set @s = charindex(@splitchar, @string, @l)
while @l <= len(@string) --判断整串的字符长度
begin
declare @id nvarchar(50) --用来存储以“;”分割出来的数据
declare @value nvarchar(MAX) --用来存储以“,”分割出来的数据,注意这里得定义的足够大,以勉值被截去
if @s = 0 set @s = len(@string) + 1 -- 如果到最后一个字符串那么第二个分隔字符的位置就是这个字符串的长度加一
set @id = substring(@string, @l, @s - @l) -- 取值
--实现分割“,”
set @first = 0
set @last=charindex(@splitC,@id,@first)
set @value=''
while @first <= len(@id)
begin
if @last = 0 set @last=len(@id) +1
if @value = ''
set @value = ''''+substring(@id,@first,@last-@first)+''','
else
set @value = @value + ''''+substring(@id,@first,@last-@first)+''','
set @first = @last + 1
set @last = charindex(@splitC, @id, @first)
end
set @value = substring(@value,1,len(@value)-1) --去掉最后一个","
declare @sql nvarchar(1000)
set @sql = 'insert into ' + @tablename + ' ( '+ @fieldname +' ) values('+ @value +')'
exec sp_executesql @sql
set @l = @s + 1
set @s = charindex(@splitchar, @string, @l)
end

调用 :exec sp_SplitConent 'kimhillzhang,20;jinshanzhang,25',';',',','T_User','username,userage'

免责声明:文章转载自《分割字符串存储过程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇连接MySQL报 unblock with 'mysqladmin flush-hosts' 问题解决使用FragmentTabHost+TabLayout+ViewPager实现双层嵌套Tab下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Oracle存储过程记录异常日志

  一般我们会将一些涉及到数据库的定时任务直接用存储过程搞定,省去了后端代码的开发、部署,简单、快速,但这种方式存在一个弊端——当存储过程执行出错了,我们无法感知。解决办法也简单,学代码那样去捕获异常、打印日志。   第一步,建日志表: create table TBL_WLF_SYS_LOG ( S_TIME VAR...

mysql事件机制——定时任务

定时任务是老生常谈了,因为我们总是需要定时修改特定的数据。 实现它的方法肯定不止一种,但我在相当长一段时间里都是用程序编码去做的,今天突然想到“为什么一定要采用调用的方式?”,用数据库自身的能力去实现不是更好么? 通过了解,mysql的事件机制可以完成定时任务,其原理是在指定的时间调用指定的存储过程。现在很简单了不是?开搞。 首先,我们需要一个存储过程,虽...

oracle sqlplus 命令行中创建存储过程

while 循环插入测试数据 1.创建存储过程 create or replace procedure proc_test_while is i number; begin i := 0; while i < 40 loop i := i + 1; insert...

【总结】数据库优化的若干方法

导图 下图是我结合自己的经验以及搜集整理的数据库优化相关内容的思维导图,如果图片不清楚,可以在浏览器中右键,在新窗口中查看(Chrome)或者查看图像(FireFox)。 常用关键字优化 在编写T-SQL的时候,会使用很多功能类似的关键字,比如COUNT和EXISTS、IN和BETWEEN AND等,我们往往会根据需求直奔主题地来编写查询脚本,完成需求要...

Oracle 编写存储过程并设置定时执行

Oracle 版本:11g PL/SQL 版本:11.0.3.1770 1.如果编写单个存储过程,则直接在procedure新建并编写;如果需要写多个同类功能的存储过程,为了方便管理,可以现在package中定义,然后在package bodies 中编写过程体,如下图所示: 1.1 编写单个procedure 1.1.1右键procedure,新建——...

MYSQL学习笔记——连接以及存储过程

连接                                                                                                     当我们需要从多个表查询数据时,我们就需要使用到连接操作,mysql支持内连接,左连接以及右连接三种连接方式。 数据库准备       首先我们创建两个表...