資料庫表欄位資料分割問題,資料庫欄位資料分割

來源:互聯網
上載者:User

資料庫表欄位資料分割問題,資料庫欄位資料分割

有的時候為了減少儲存記錄數,可能會把多條記錄合并為一條顯示。這種情況的發生主要體現上記錄在表的其它欄位都相同,只有某一個欄位是變化的這種情況,例如人事管理中,部門中的相關人的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或類似的切分函數了,如果資料庫不支援此函數,再看你的前台程式設計語言中是否有此函數,如果前台語言也不支援此函數,那麼就自己寫一個這樣的切分函數,自產自銷
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.