MSSQL - 以逗号分隔的字符串值到新表中

时间:2013-12-06 18:37:41

标签: sql-server

处理MSSQL Server中逗号分隔值的问题。

我有一个有两列的表-1。

COL1包含逗号分隔值的字符串:

  'a,b,c,...'
  'w,x,y,...'

COL2持有INT s。

所以数据看起来像这样:

  |   COL1   |   COL2   |
  |'a,b,c,..'|    4     |
  |'w,x,y,..'|    5     |

我需要一个新的两个列的表-2,其中每个(逗号分隔的)值来自表1中的COL1,它自己的行,以及表-1中相应的INTCOL2。像这样:

  | 'a'  | 4 |
  | 'b'  | 4 |
  ...
  | 'w'  | 5 |
  | 'x'  | 5 |
  ...

这将是一个过程语言,但我不知道如何从SQL获取所需的输出,我的输出需要直接从查询(对于Oracle业务服务器)获得。 / p>

欣赏任何建议。一个好的方向指示提示应该为我做。两天的互联网搜索没有让我到达我需要的地方。

1 个答案:

答案 0 :(得分:3)

首先,创建一个分割函数:

CREATE FUNCTION [dbo].[SplitString]
    (
        @List NVARCHAR(MAX),
        @Delim VARCHAR(255)
    )
    RETURNS TABLE
    AS
        RETURN ( SELECT [Value] FROM 
          ( 
            SELECT 
              [Value] = LTRIM(RTRIM(SUBSTRING(@List, [Number],
              CHARINDEX(@Delim, @List + @Delim, [Number]) - [Number])))
            FROM (SELECT Number = ROW_NUMBER() OVER (ORDER BY name)
              FROM sys.all_objects) AS x
              WHERE Number <= LEN(@List)
              AND SUBSTRING(@Delim + @List, [Number], LEN(@Delim)) = @Delim
          ) AS y
        );

现在:

SELECT Col1 = s.Value, Col2 = t1.COL2
--  INTO dbo.[Table-2]
FROM dbo.[Table-1] AS t1
CROSS APPLY dbo.SplitString(t1.COL1, ',') AS s;

如果您对输出感到满意,请取消注释-- INTO以生成新表。