处理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中相应的INT
值COL2
。像这样:
| 'a' | 4 |
| 'b' | 4 |
...
| 'w' | 5 |
| 'x' | 5 |
...
这将是一个过程语言,但我不知道如何从SQL获取所需的输出,我的输出需要直接从查询(对于Oracle业务服务器)获得。 / p>
欣赏任何建议。一个好的方向指示提示应该为我做。两天的互联网搜索没有让我到达我需要的地方。
答案 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
以生成新表。