• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

数据库表字段数据分割问题

mysql 搞代码 4年前 (2022-01-09) 28次浏览 已收录 0个评论

有的时候为了减少存储记录数,可能会把多条记录合并为一条显示。这种情况的发生主要体现上记录在表的其它字段都相同,只有某一个字段是变化的这种情况,例如人事管理中,部门中的相关人的ID都放在一条记录的一个字段中,中间用逗号隔开。现在的需求就是要将

有的时候为了减少存储记录数,可能会把多条记录合并为一条显示。这种情况的发生主要体现上记录在表的其它字段都相同,只有某一个字段是变化的这种情况,例如人事管理中,部门中的相关人的ID都放在一条记录的一个字段中,中间用逗号隔开。现在的需求就是要将一条记录按ID字段分割成多条记录。

CREATE TABLE [dbo].[Table_Dept](	[DEPT_CODE] [int] NULL,	[content] [nvarchar](50) NULL,	[A0188s] [nvarchar](max) NULL) ON [PRIMARY]GOinsert into Table_Dept select 1000,'总务系','350,688,258' union all select 1001,'总经理室','2,3,4,298'查询该表结果如下,其中DEPT_CODE部门编码,content是部门名称,A0188s是相关人。

现在需要将A0188s中的ID分解为多条显示。考虑采用自定义字符串分割函数实现,分割函数脚本:

CREATE   FUNCTION [dbo].[Split]   (   @c VARCHAR(MAX) ,   @split VARCHAR(50)   )   RETURNS @t TABLE ( col VARCHAR(50) )  <a style="color:transparent">本文来源gao($daima.com搞@代@#码$网</a> AS  BEGIN      WHILE ( CHARINDEX(@split, @c)  0 )           BEGIN              INSERT  @t( col )               VALUES  ( SUBSTRING(@c, 1, CHARINDEX(@split, @c) - 1) )               SET @c = STUFF(@c, 1, CHARINDEX(@split, @c), '')           END      INSERT  @t( col ) VALUES  ( @c )       RETURN  END

但是该函数只能处理单条记录,这里考虑采用游标遍历原表,逐个分解然后存储到临时表中。

IF object_id('tempdb..#TEMPTB1') is not nullBEGIN	drop table #TEMPTB1ENDCREATE table #TEMPTB1(    [DEPT_CODE] [int] NULL,    [content] [nvarchar](50) NULL,    [A0188s] [nvarchar](max) NULL)IF object_id('tempdb..#TEMPTB2') is not nullBEGIN	drop table #TEMPTB2ENDCREATE table #TEMPTB2(    [pid] [nvarchar](max) NULL)declare @DEPT_CODE intdeclare @content varchar(50)declare @A0188s varchar(max)exec('declare my_cursor1 cursor for select * from [Table_Dept]')open my_cursor1declare @id1 sysnamedeclare @id2 sysnamedeclare @id3 sysnamefetch next from my_cursor1 into @id1,@id2,@id3	while(@@fetch_status= 0)		begin				set @DEPT_CODE =convert(int,@id1)			set @content =convert(varchar(50),@id2)			set @A0188s =convert(varchar(max),@id3)			truncate table #TEMPTB2		     insert into #TEMPTB2 select * from Split(@A0188s,',')		     insert into #TEMPTB1 select @DEPT_CODE,@content,pid from #TEMPTB2			fetch next from my_cursor1 into @id1,@id2,@id3		endclose my_cursor1deallocate my_cursor1select * from #TEMPTB1

得到最终结果


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:数据库表字段数据分割问题
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址