【问题标题】:How to split the column values separated with | and group them in a SQL Server stored procedure如何拆分用 | 分隔的列值并将它们分组到 SQL Server 存储过程中
【发布时间】:2015-10-13 08:20:42
【问题描述】:

我有一列的值如下:

Description
-----------
1|123
1|124
1|125
2|356
2|746

我需要将此作为包含两列的表格返回:

Id    Description
-----------------
1     123,124,125
2     356,746

请任何人建议如何做到这一点?

【问题讨论】:

  • 到目前为止你尝试过什么?我们很乐意提供帮助 - 但我们不会只为您编写整个代码 - SO 是一个问答网站 - 毕竟不是代码编写服务!
  • 这两种形式都不是特别“健康”的。每列应该包含(对于每一行)一个 single 标量值。不是竖线分隔或逗号分隔的重复值。

标签: sql sql-server-2008 stored-procedures


【解决方案1】:

创建一个函数:

  Create FUNCTION [dbo].[fn_Split](@text varchar(8000), @delimiter          varchar(20))
 RETURNS @Strings TABLE
(   
position int IDENTITY PRIMARY KEY,
 value varchar(8000)  
)
 AS
 BEGIN

 DECLARE @index int
 SET @index = -1

   WHILE (LEN(@text) > 0)
    BEGIN 
    SET @index = CHARINDEX(@delimiter , @text) 
      IF (@index = 0) AND (LEN(@text) > 0) 
  BEGIN  
    INSERT INTO @Strings VALUES (@text)
      BREAK 
  END 
IF (@index > 1) 
  BEGIN  
    INSERT INTO @Strings VALUES (LEFT(@text, @index - 1))  
    SET @text = RIGHT(@text, (LEN(@text) - @index)) 
  END 
ELSE
  SET @text = RIGHT(@text, (LEN(@text) - @index))
END
  RETURN
   END

然后在你的情况下传递你的字符串参数和分隔符,它将是 |

【讨论】:

    猜你喜欢
    • 2014-05-30
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多