当前位置:Gxlcms > 数据库问题 > SQL SERVER 一行按照某个由分隔符拼接的字段拆分成多行

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

时间:2021-07-01 10:21:17 帮助过:8人阅读

技术分享

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

技术分享

首先,创建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 一行按照某个由分隔符拼接的字段拆分成多行

标签:

人气教程排行