最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-09 14:46:22
文档

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

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


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

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

CREATE TABLE [dbo].[Table_Dept](
	[DEPT_CODE] [int] NULL,
	[content] [nvarchar](50) NULL,
	[A0188s] [nvarchar](max) NULL
) ON [PRIMARY]

GO

insert 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) ) 
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 null
BEGIN
	drop table #TEMPTB1
END
CREATE table #TEMPTB1
(
 [DEPT_CODE] [int] NULL,
 [content] [nvarchar](50) NULL,
 [A0188s] [nvarchar](max) NULL
)

IF object_id('tempdb..#TEMPTB2') is not null
BEGIN
	drop table #TEMPTB2
END
CREATE table #TEMPTB2
(
 [pid] [nvarchar](max) NULL
)

declare @DEPT_CODE int
declare @content varchar(50)
declare @A0188s varchar(max)
exec('declare my_cursor1 cursor for select * from [Table_Dept]')
open my_cursor1
declare @id1 sysname
declare @id2 sysname
declare @id3 sysname
fetch 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
	end
close my_cursor1
deallocate my_cursor1

select * from #TEMPTB1
得到最终结果

文档

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

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

最新推荐

猜你喜欢

热门推荐

专题
Top