好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SQL SERVER 一行按照某个由分隔符拼接的字段拆分成多行

我们可能在某些业务场景下转换成以下形式:

首先,创建sql 函数,将拼接的字符串拆分成table

 CREATE   FUNCTION   [  dbo  ] . [  UF_SplitStringToTable  ]  (
      @sInputList   VARCHAR ( MAX )  --   List of delimited items 
  ,  @sDelimiter   VARCHAR ( 20 )  =   ‘  ,  ‘   --   delimiter that separates items 
)  RETURNS   @List   TABLE  (item  VARCHAR ( 50  ))

  BEGIN 
 DECLARE   @sItem   VARCHAR ( MAX  )
  WHILE   CHARINDEX ( @sDelimiter , @sInputList , 0 )  <>   0 
  BEGIN 
  SELECT 
   @sItem  =  RTRIM ( LTRIM ( SUBSTRING ( @sInputList , 1 , CHARINDEX ( @sDelimiter , @sInputList , 0 ) -  1  ))),
    @sInputList  =  RTRIM ( LTRIM ( SUBSTRING ( @sInputList , CHARINDEX ( @sDelimiter , @sInputList , 0 ) +  LEN ( @sDelimiter ), LEN ( @sInputList  ))))

   IF   LEN ( @sItem )  >   0 
   INSERT   INTO   @List   SELECT   @sItem 
  END 

 IF   LEN ( @sInputList )  >   0 
  INSERT   INTO   @List   SELECT   @sInputList   --   Put the last item in 
 RETURN 
 END 



 GO 

然后,利用cross apply 将表FileHistory  和由此表列:keywords 通过UF_SplitStringToTable(FileHistory.keywords)的派生表连接生成想要的拆分结果。

具体代码如下:

 SELECT   
   t1.  [  Id  ]  
  ,t1.  [  Keywords  ]  
  ,t1.  [  FileName  ]  
  ,t1.  [  FileExtension  ]  
  ,t1.  [  CreatedUser  ]  
  ,t1.  [  CreatedTime  ]  
  ,t1.  [  ImportType  ]   
  ,i.item as keyword  
  FROM   FileHistory t1
  OUTER  APPLY UF_SplitStringToTable(t1.Keywords,  ‘  ,  ‘ ) i 

成功执行代码后,返回如下结果:

 这样,就完成我们需要的结果啦~

2015,fighting for myself,my dear darling, my family, ~O(∩_∩)O~。

SQL SERVER 一行按照某个由分隔符拼接的字段拆分成多行

标签:

查看更多关于SQL SERVER 一行按照某个由分隔符拼接的字段拆分成多行的详细内容...

  阅读:50次