資料庫表欄位資料分割問題,資料庫欄位資料分割
有的時候為了減少儲存記錄數,可能會把多條記錄合并為一條顯示。這種情況的發生主要體現上記錄在表的其它欄位都相同,只有某一個欄位是變化的這種情況,例如人事管理中,部門中的相關人的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) ) 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 nullBEGINdrop table #TEMPTB1ENDCREATE table #TEMPTB1( [DEPT_CODE] [int] NULL, [content] [nvarchar](50) NULL, [A0188s] [nvarchar](max) NULL)IF object_id('tempdb..#TEMPTB2') is not nullBEGINdrop 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,@id3while(@@fetch_status= 0)beginset @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 #TEMPTB2fetch next from my_cursor1 into @id1,@id2,@id3endclose my_cursor1deallocate my_cursor1select * from #TEMPTB1
得到最終結果
資料庫欄位分割問題
認真分解一下唄,這麼簡單:
1==> :這個是第一行開始的標記。
<+_+>:這個是記錄與記錄之間的分割符號。
<@_@>:這個是欄位與欄位之間的分割符號。
然後如果是在C#裡分分割就編程唄。
如果想要在資料庫裡面分割,就寫一個預存程序唄。
在資料庫中怎分割欄位中的逗號
這要看你的資料庫文法中是否有split或類似的切分函數了,如果資料庫不支援此函數,再看你的前台程式設計語言中是否有此函數,如果前台語言也不支援此函數,那麼就自己寫一個這樣的切分函數,自產自銷